[英]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.