2011-06-14 120 views
2

我一直在使用mod_rewrite一段時間並喜歡它。不過,我有點不知道該怎麼做。這是我想做的事:Mod_Rewrite幫助!

我有一個網站的移動版本,我要http://myflashpics.com/user/flashpics重定向到http://myflashpics.com/mobile/user/flashpics

這裏是我的代碼:

RewriteRule user/(.*)/$ /viewer/index.php?profile=$1 
RewriteRule user/(.*)$ viewer/index.php?profile=$1 

RewriteRule mobile/user/(.*)/$ /mobile/index.php?user=$1 
RewriteRule mobile/user/(.*)$ mobile/index.php?user=$1 

但要移動版本時,它顯示的是桌面版本?那是怎麼回事?

感謝, 庫爾頓

回答

2

你的前兩個的RewriteRules正則表達式您的移動路徑也匹配,因爲user/(.*)/$只是測試,看看是否在模式請求路徑的終點相匹配。您應該添加^到你的測試開始讓他們檢查整個請求路徑匹配,如下所示:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1 
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1 

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1 
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1 

作爲一個側面說明,你也可以保存重寫引擎有點麻煩,降低您的規則設置爲兩個規則。我還更新您捕捉表情,因爲你可能不看他們包括正斜槓都:

RewriteRule ^user/([^/]*)/?$ /viewer/index.php?profile=$1 

RewriteRule ^mobile/user/([^/]*)/?$ /mobile/index.php?user=$1 
+0

那樣做了。謝謝。 – iosfreak 2011-06-15 00:02:31

0

你的第一個規則匹配領先的移動規則,因爲它不限於user/開頭出現的字符串。與^作爲前綴表示字符串的開頭:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1 
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1 

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1 
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1 
0

這對我來說並不很清楚你想要做什麼,但你可以這樣壓縮你的.htaccess代碼:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 

RewriteRule ^user/(.*)/?$ /viewer/index.php?profile=$1 [L,NC,QSA] 

RewriteRule ^mobile/user/(.*)/?$ /mobile/index.php?user=$1 [L,NC,QSA]