Gunakan htaccess untuk menulis semula URL direktori ke dalam fail PHP
P粉957723124
P粉957723124 2024-01-10 17:18:14
0
1
410

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

membalas semua(1)
P粉343408929

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:

# 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

adalah relatif kepada direktori tempat fail .htaccess berada.

MultiViews,因为如果禁用,此规则将无法按预期工作。该请求将被重写为 services.php,但不包含 servAnda perlu memastikan untuk melumpuhkan

parameter URL. (Pandangan berbilang kadangkala didayakan pada sesetengah pelayan kongsi, yang boleh menyebabkan banyak konflik.)

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. 🎜
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!