2012-01-02 54 views
1

我一直在研究已有應用程序的iPhone版本。mod_rewrite和iPhone重定向

我們使用一些改寫規則來改善搜索引擎優化,讓訪問者更輕鬆。 例如。 http://www.site.com/index.php?job=4ef187d6e66b7改寫爲http://www.site.com/jobs/4ef187d6e66b7

我們還使用規則將所有iPhone用戶重定向到我們的移動網站,如下:

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule .* /m/ [R] 

移動網站只是位於www.site.com/m/

但是,當我前往了http://www.site.com/jobs/4ef187d6e66b7,我越來越重定向到http://www.site.com/m/?job=4ef187d6e66b7,而應該是http://www.site.com/m/jobs/4ef187d6e66b7

有沒有辦法來重定向人,仍然保持一些日。現有規則? 我也想加入這個規則,但沒有奏效

RewriteRule ^m/jobs/([^/]+) m/index.php?job=$1 [NC] 

這是一個完整的.htaccess

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule ^jobs/([^/]+) index.php?job=$1 [NC] 

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule .* /m/ [R] 

回答

1

你應該把iPhone重定向第一,然後將其標記「最後」。這樣,移動重定向將優先於其他重定向。

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule (.*) /m/$1 [R,L] 

RewriteRule ^(m/|)jobs/([^/]+) index.php?job=$2 [NC] 

另外請確保您在重定向中包含原始路徑(如第三行所示)。

最後的重寫規則將匹配/m/jobs/xxx以及/jobs/xxx

+0

這似乎起初工作,url不會被正確重寫。 但形成一些理由似乎並沒有工作:_請求的URL/m/jobs/4ef9a591edc33在此服務器上找不到._ – 2012-01-02 12:21:03

+0

這意味着重寫IS工作! iPhone現在重定向到**/m /...**。您現在應該正確處理'/ m/...'URL。如果你想在最後的重寫規則中加入,你應該相應地修改它。我將編輯我的答案以反映這一點。 – bouke 2012-01-02 12:48:37

+0

謝謝,重寫確實有效。 我現在只是遇到了另一個問題,當我轉到http://www.site.com/jobs/4ef9a591edc33時,我被重定向到了http://www.site.com/m/index。 php?job = 4ef9a591edc33 哪個是正確的url,但它應該顯示爲http://www.site.com/m/jobs/4ef9a591edc33 – 2012-01-02 13:19:24