簡體   English   中英

htaccess中的RewriteRule錯誤

[英]RewriteRule error in the htaccess

我有一個如下問題:

RewriteRule ^site   site.php [NC,L]
RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=1$ [NC,L]

這個想法是要認識到url中是否有參數。 這就是我想要的:

www.example.com/site
www.example.com/site/1

據我所知,但我只是在嘗試無法解決問題。 先感謝您。

在您的規則對中,第一個將與兩個示例URL匹配。 因此,第二條規則將永遠不會得到應用。 您必須更改規則的順序:

RewriteEngine on
RewriteRule ^/?site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L]
RewriteRule ^/?site/?$ site.php [NC,L]

請注意,我還稍微修改了第二條規則,以防止它與/sitelist類的路徑匹配。 同樣,它也因為匹配/site.php而防止了重定向循環/? 我還添加了允許在http服務器主機配置中使用相同規則而無需進行修改的方法,不僅限於.htaccess樣式的動態配置文件。

一個一般提示:您應該始終喜歡將此類規則放置在http服務器主機配置中,而不是使用動態配置文件(“ .htaccess ”)。 眾所周知,這些文件容易出錯,難以調試,並且確實降低了服務器的速度。 僅當您無法控制主機配置(閱讀:真正便宜的托管服務提供商)或者您的應用程序依賴於編寫自己的重寫規則(這顯然是安全噩夢)時,才提供它們作為最后的選擇。 )。

此行會將以site開頭的所有URL重定向到site.php:

RewriteRule ^site   site.php [NC,L]

此行將永遠不會運行,因為site已被第一條規則捕獲並重定向:

RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L]

因此,只需先運行第二條規則即可解決該問題,因為它將觸發更具體的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM