2009-08-24 20 views
1

所以,我有這個Zend風格的前端控制器設置。基本上它只是將每個url重定向回索引。mod_rewrite noobie question

的URL是在/ controller/view/ + [additional parameters]

形式,我想在下面的表單創建一些捷徑:

RewriteRule ^home /home/index 
RewriteRule ^products /products/view 

RewriteRule .* index.php 

然而,mod_rewrite的似乎無視我的重寫規則。儘管我很確定它應該能夠抓住這一點,但它並沒有改變家庭/指數的位置。所以,我認爲這與重命名請求uri有關係嗎?

這裏的.htaccess文件:

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^admin/ - [L] 
RewriteRule ^media/ - [L] 

RewriteRule ^home  home/index 
RewriteRule ^products products/view 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php 
+0

做的規則不工作或只是預期的結果錯誤(* index.php *無法處理它)?如果是後者,$ _SERVER ['REQUEST_URI']'包含什麼值? – Gumbo 2009-08-24 09:54:30

+0

$ _SERVER ['REQUEST_URI']包含原始的uri(家庭或產品)。這就像它無法改變REQUEST_URI,即使我確信它能夠抓住它。所以當它到達最後一行時,會將所有內容都重定向到index.php,它將它視爲沒有改變。 – JHollanti 2009-08-24 11:08:48

+0

嗯,REQUEST_URI應該保持不變,因爲你正在重寫而不是重定向。如果你想要REQUEST_URI,你可以爲它寫一條單獨的線。您沒有[L],代表您的家庭和產品系列中的Last Rule。這意味着它將繼續尋找任何其他匹配。我已經調整了我的答案。 – Fabian 2009-08-24 12:51:52

回答

0

到目前爲止,我已經想通了這麼多。

如果使用RewriteRule來更改REQUEST_URI,它實際上並不會改變REQUEST_URI,而是另一個變量REDIRECT_URI。這解釋了爲什麼nothng發生。

而且,有趣的是,我可以做這樣的事情:

RewriteRule ^products products/view [NC,L] 

有得這種作用被法比安建議。他只是將index.php添加到最後,這對我沒有任何作用。如果我離開index.php,一切都很完美。不知何故,它神奇地將所有內容重定向到index.php。

所以現在,一切正常,但我還沒有知道爲什麼一切正常。對於任何設法解釋這裏發生的事情的人來說,絕對是有利的。直到那時我認爲我只是RTFM。

0

以下規則捕捉一切,所以如果它的頂部永遠不會考慮任何其他規則。

RewriteRule .* index.php 

請嘗試以下

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^admin/  - [L] 
RewriteRule ^media/  - [L] 

RewriteRule ^home  home/index [L] 
RewriteRule ^products products/view [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*   index.php 
+0

是的,'重定向所有索引'位僅位於最後。對於那個很抱歉。儘管如此,仍然無法工作。 – JHollanti 2009-08-24 09:00:26

+0

您可以添加您的整個.htaccess文件,這樣更容易。 – Fabian 2009-08-24 09:34:46

+0

好的,將其編輯爲問題的一部分。 – JHollanti 2009-08-24 09:43:50

0

當您試圖重寫只是/home開始/home/index一切,因爲後者不也/home開始你可能會問題。你應該使用這樣一個更具體的模式:

RewriteRule ^home$ home/index 
RewriteRule ^products$ products/view 

但其餘的應該工作正常。

+0

沒有任何效果。 – JHollanti 2009-08-24 12:09:53