cari

Rumah  >  Soal Jawab  >  teks badan

peraturan penulisan semula htcaccess tidak berfungsi

Saya sedang mengusahakan projek di mana saya cuba melakukan penulisan semula URL dalam akar tapak web saya. Semasa .htaccess adalah seperti berikut

RewriteEngine On 
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=

Tapak web saya telah didayakan penulisan semula. Saya telah menyemak kod melalui penguji htaccess dan ia menunjukkan nilai yang betul.

Namun, apabila saya melawat screenshot-of-the-week/screenshot/123 为例时,我得到了 404 页面。当我访问 screenshot-of-the-week/screenshot/ ia berfungsi dengan baik.

Selain itu, apabila pergi ke URL "sebenar" secara manual, ia juga berfungsi seperti yang diharapkan: screenshot-of-the-week/screenshot/index.php?id=123

Saya seolah-olah tidak dapat memahami apa masalahnya dan telah cuba mengalihkan .htaccess ke folder lain dan sudah tentu mengedit laluan, tetapi tidak berjaya.

Bolehkah sesiapa memberikan petua penyelesaian masalah lain? Bagaimanakah saya boleh menyemak apa yang sebenarnya dilakukan oleh ubah hala di sebalik tabir?

P粉848442185P粉848442185315 hari yang lalu421

membalas semua(1)saya akan balas

  • P粉218775965

    P粉2187759652024-01-17 17:55:15

    "Masalah" dengan peraturan ini ialah ia juga sepadan dengan URL yang ditulis semula (khususnya, parameter [^/]+index.php 匹配),因此会再次重写时间到 /screenshot-of-the-week/screenshot/index.php?id=index.phpid=123 ditindih). Jadi, saya mengharapkan skrip anda menjana respons 404 (bukan Apache)?

    Untuk menyelesaikan isu ini, anda harus menjadikan regex lebih spesifik dan/atau menggunakan bendera END (Apache 2.4) untuk menghalang enjin tulis semula daripada melakukan gelung tambahan (dan penulisan semula kedua).

    Dalam contoh anda, anda menghantar nilai angka - jadi jika anda hanya mengharapkan nilai angka, hanya nombor akan dipadankan.

    Contohnya:

    RewriteRule ^screenshot-of-the-week/screenshot/(\d+)$ /screenshot-of-the-week/screenshot/index.php?id= [END]

    Perhatikan bahawa saya juga menambahkan jejak $,否则您的网站可能会被滥用,因为任何内容都可以附加到 URL,并且相同的资源将被服务。 (在您的原始规则中附加 / pada regex yang akan menghasilkan respons yang sama. )

    (Saya menganggap fail .htaccess anda berada dalam akar dokumen.)


    Penguji MWL hanya melakukan satu laluan melalui fail. Ini bukan cara pelayan Apache sebenar berfungsi. Oleh itu, penguji MWL tidak dapat mengesan gelung tulis semula/ubah hala.

    Apabila anda mengakses parameter screenshot-of-the-week/screenshot/ 时,规则不会被处理(正则表达式不匹配)。 mod_dir 提供 DirectoryIndex 文档 (index.php),但没有 id.

    balas
    0
  • Batalbalas