我想將使用原始URL請求的舊站點的URL重定向到我在CodeIgniter中實現的新站點。我只是想將它們重定向到我的索引頁面。我也想擺脫我的URL中的「index.php」,這樣我的URL就可以像example.com/this/that一樣簡單。所以,這是.htaccess
文件我已經創建:爲什麼Apache mod_rewrite沒有像預期的那樣運行
RewriteEngine on
Options FollowSymLinks
RewriteBase/
RewriteCond $1 ^assets
RewriteRule ^(.*)$ example/production/$1
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ index.php? [R=301]
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/$1
還應當指出的是,我的index.php實際上是一個符號鏈接example/production/index.php
。
現在,第一條規則按預期工作 - 我所有的樣式和圖像都顯示得很好,這是我遇到的第二條規則。第二條規則基本上是銷燬查詢字符串並重定向到我的索引頁面(外部)。所以,我發現這個在Apache手冊:
注:查詢字符串
格局將不會對查詢字符串相匹配。相反,您必須使用帶有%{QUERY_STRING}變量的RewriteCond。但是,您可以在替換字符串中創建URL,其中包含查詢字符串部分。只需在替換字符串中使用問號,表示應將以下文本重新注入查詢字符串中。當您要刪除現有的查詢字符串時,只需使用問號結束替換字符串。要將新查詢字符串與舊查詢字符串結合使用,請使用[QSA]標誌。
但是,當我嘗試訪問其中一箇舊頁面,而不是重定向到我的索引頁面時,出現404頁面未找到錯誤。我已經找到了一種解決方法,將其作爲內部重定向,但我真的很喜歡它是外部的。
下一個問題,以及令我莫名其妙的問題是第三條規則。我希望這可以做到以下幾點。如果我輸入:
http://example.com/this/thing
我希望它重新路由到
http://example.com/index.php/this/thing
不幸的是,這是行不通的。相反,無論我輸入什麼內容,它總是會路由到我的索引頁面,就好像URL中沒有其他內容一樣(它只是去http://example.com/
)。
而且,更令人困惑的我,如果我用下面的替換規則:
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/this/thing
如果我在如http://example.com/other/thing
網址類別,那麼它會去http://example.com/index.php/this/thing
不如預期,但如果我輸入http://example.com/this/thing
去http://example.com/
(我的索引頁)。我無法讓頭或尾巴出來。任何幫助將不勝感激。
嗯 - 這似乎也不起作用。問題是我的URL並不是真的要求文件名或目錄。例如:example.com/index.php/this/thing應該調用'this'控制器的'thing'方法。 – 2008-12-19 06:54:07