近來在Apache Rewrite 擬靜態配置時,遇到個問題。寫的如下:
RewriteEngine on
RewriteRule ^/t_(.*)/$ /test.php?id=$1
保存在httpd.conf文件中時,發現可以起作用。
而寫在.htaccess文件中,死活不起作用。經過研究發現,里面隨便填寫字符,服務器報500錯誤,而且進行定向也沒問題,所以不是訪問不到的問題,初步猜測應該是語法的問題。后來在百度“RewriteRule .htaccess”時 找到一篇文章, 文章標題:《URL RewriteRule在httpd.conf和.htaccess中的不同點》 看到了:
需要注意的是,在這兩個文件中添加到URL重寫規則略有不同。而這些不同,對於不熟悉的人來說,很可能會困擾許久。
在Httpd.conf中: (1)Request URI的開頭必須以斜線開始; (2)在尋找Cache文件的時候,必須在開頭加上斜線; (3)在使用-f或者!-f的時候,必須在開頭加上斜線。
在.htaccess中,情況完全相反: (1)Request URI的開頭不能有斜線; (2)在尋找Cache文件的時候,不能在開頭加上斜線; (3)在使用-f或者!-f的時候,不能在開頭加上斜線。
簡單而言,就是在httpd.conf中,重寫前后的URL在使用絕對路徑時需要添加斜線“/”,表示從網站根目錄開始;而在.htaccess中,則不需要。
把.htaccess文件中的/去掉 測試OK了。