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?
"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.php
(id=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:
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
.