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
Peraturan pertama anda ("Sembunyikan sambungan .php") yang menyebabkan "Terlalu banyak ubah hala dalaman" kerana ia (tersalah)
services/Boat-Dealers.php
的请求重写为 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 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:Perhatikan bahawa awalan penggantian slash pada rentetan telah dialih keluar.
Arahan
adalah relatif kepada direktori tempat failRewriteBase
tidak diperlukan di sini. PenggantianRewriteBase
指令。相对替换是相对于.htaccess
relatif.htaccess
berada.MultiViews
,因为如果禁用,此规则将无法按预期工作。该请求将被重写为services.php
,但不包含serv
Anda perlu memastikan untuk melumpuhkan