Rumah > Soal Jawab > teks badan
Saya cuba melaksanakan peraturan penulisan semula yang mudah menggunakan fail htaccess. Saya mengehos halaman ini di localhost menggunakan XAMPP:
localhost/naveesh/services.php
Cara yang mungkin untuk meminta operasi ini adalah seperti berikut:
localhost/naveesh/services?serv=Boat%20Dealers
Apa yang saya mahu lakukan ialah menulis semula permintaan untuk URL berikut ke URL di atas
localhost/naveesh/services/Boat-Dealers
Saya mencuba ini tetapi ia memberi saya ralat 404.
RewriteEngine On RewriteRule ^/naveesh/services/([^/]+)/?$ /naveesh/services.php?serv= [L,QSA]
Selepas beberapa kajian, saya mencuba pilihan lain:
RewriteEngine On RewriteBase /naveesh/ # Hide .php extension RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ .php [L] RewriteRule ^services/([^/]+)/?$ /services.php?serv= [L,QSA]
Walau bagaimanapun, terdapat terlalu banyak isu ubah hala dalaman sekarang
P粉3434089292024-01-11 16:05:46
Peraturan pertama anda ("Sembunyikan sambungan .php") yang menyebabkan "Terlalu banyak ubah hala dalaman" kerana ia (tersalah) services/Boat-Dealers.php
的请求重写为 < code>services/Boat-Dealers.php.php 等。这是因为条件(始终成功)没有检查您最终重写的内容。 REQUEST_FILENAME
bukan seperti yang anda jangkakan. (Walaupun membalikkan susunan peraturan ini menyelesaikan masalah segera ini.)
Sila lihatKomen saya tentang perkara berikutMasalah pada ServerFault < /a> Butiran lanjut tentang isu khusus ini.
Namun, peraturan kedua juga tidak betul (seperti yang dinyatakan dalam @jawapan Faizal).
Peraturan juga dalam susunan yang salah.
Andaikan fail .htaccess
文件位于 /naveesh/.htaccess
(不是文档根目录),那么您的完整 .htaccess
anda sepatutnya kelihatan seperti ini:
# Disable MultiViews Options -MultiViews RewriteEngine On RewriteRule ^services/([^/]+)/?$ services.php?serv= [QSA,L] # Hide .php extension RewriteCond %{DOCUMENT_ROOT}/naveesh/.php -f RewriteRule ^(.*?)/?$ .php [L]
Perhatikan bahawa awalan penggantian slash pada rentetan telah dialih keluar.
Arahan RewriteBase
tidak diperlukan di sini. Penggantian RewriteBase
指令。相对替换是相对于.htaccess
relatif
.htaccess
berada.
MultiViews
,因为如果禁用,此规则将无法按预期工作。该请求将被重写为 services.php
,但不包含 serv
Anda perlu memastikan untuk melumpuhkan
Selain itu, anda tidak seharusnya benar-benar membenarkan garis miring pilihan pada URL yang diminta. Ini boleh membawa kepada isu kandungan pendua kerana anda mempunyai dua URL berbeza (satu dengan garis miring dan satu tanpa garis miring) yang menyajikan kandungan yang sama. Tiada garis miring di belakang dalam URL contoh anda, jadi mengapa memasukkannya? Jika anda perlu membenarkan garis miring pilihan (contohnya, jika anda mempunyai beberapa pautan masuk buruk yang menghala ke URL bukan kanonik), maka anda harus mengubah hala satu pautan ke pautan yang lain secara luaran. 🎜