在虛擬主機上開始使用 apache mod_rewrite
嘿,所以我正在嘗試使用 apache 的 mod_rewrite 模組在我的網站上對 url 進行一些基本的重寫,以便它們變得更加 seo 友好
基本上我有一個看起來像這樣的虛擬主機文件
<VirtualHost *:80> ServerAdmin morrison.brendan17@gmail.com ServerName mind-knowledge.com ServerAlias www.mind-knowledge.com DocumentRoot /var/www/tagmenu <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/tagmenu> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all <IfModule mod_rewrite.c> RewriteEngine on RewriteRule /video/([0-9]+) /PlayVideo/index.php?videoID=13424 </IfModule> </Directory> </VirtualHost>
現在據我了解,重寫規則應該允許
http://www.mind-knowledge.com/PlayVideo/13424/
呈現為頁面http://www.mind-knowledge.com/PlayVideo/index.php?videoID=13424
是否正確?目前我得到 404 ,並且我已經執行
sudo a2enmod rewrite
並重新載入了 apache。任何人都可以幫助我解決我做錯的事情或提出一些解決問題的方法,謝謝。布倫丹
您想
/PlayVideo/13424/
工作,但重寫規則的第一部分是/video/
.您也不要在第二部分中使用與第一部分匹配的數字,這意味著每個人都將始終觀看相同的影片,無論其 URL 中的數字是多少。
將其更改為此以解決這兩個問題:
RewriteRule /PlayVideo/([0-9]+) /PlayVideo/index.php?videoID=$1
我之前應該注意到這一點,但可能還有另外兩個問題。首先是你的重寫規則在一個
<Directory>
塊內,這改變了它們的工作方式。解釋這一點的簡單方法是刪除前導斜杠。技術上更準確的描述是,傳遞給要匹配的重寫規則的路徑是文件系統路徑而不是 URI,並且它從開頭刪除了目錄。
所以在一個
<Directory>
塊內,你應該使用:RewriteRule PlayVideo/([0-9]+) PlayVideo/index.php?videoID=$1
另一件事是次要的,但我更喜歡根本沒有
<IfModule>
障礙。這些對於包維護者來說很方便,他們的配置將由所有能力級別的人部署在數千台不同的機器上,但是對於(可能)一個管理員的單一部署,他們所做的只是隱藏其他錯誤。如果您忘記載入重寫模組(註釋掉該行,刪除符號連結等),Apache 仍然可以正常啟動並且不會拋出任何錯誤,但是重寫模組將不起作用,並且依賴於它的 URI 將導致 404 ,就像你看到的那樣。如果沒有該<IfModule>
塊,同樣的錯誤會導致 Apache 無法啟動,並會導致有用的錯誤消息。