peraturan penulisan semula htcaccess tidak berfungsi
P粉848442185
P粉848442185 2024-01-16 20:08:17
0
1
363

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粉848442185
P粉848442185

membalas semua(1)
P粉218775965

"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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!