2010-05-10 119 views
0

我目前有一個網站,在index.php上有一個標準的網頁界面,我在iphone.php中做了一個iPhone友好的版本。
兩頁都處理相同的參數。Apache rewrite_mod:RewriteRule路徑和查詢字符串

它正常工作時,我手動.../iphone.php,但我想改寫上.../path/任何東西,.../path/index.phpiphone.php如果%{HTTP_USER_AGENT}包含mobile,還可以選擇添加查詢字符串(不知道如果/當我需要添加它)。

到目前爲止,這是我在我的.../path/.htaccess

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^.+mobile.+$ [NC] 
RewriteRule index.php?(.*) iphone.php?$1 [L] 
RewriteRule index.php  iphone.php [L] 

的問題是,它匹配index.php任何子文件夾,並且它不會匹配.../path/?args ...

+0

你有一個網頁的index.php或許多不同的文件夾? – 2010-05-10 14:04:46

回答

1
  1. RewriteCond適用於只有一個重寫規則。
  2. 要匹配所有包含'mobile'的用戶代理名稱.* - 0或更多任何字符應在^.+mobile.+$語句中使用。
  3. RewriteRule默認情況下不包含查詢字符串 - [QSA]標誌應該用於包含查詢字符串。
  4. RewriteRule使用正則表達式 - 您應該使用\.轉義點。
  5. RewriteRule自動保存查詢字符串相同,如果沒有指定另一個。

更新:

完全.htacess

RewriteEngine On 

RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC] 
RewriteRule ^(.*)index\.php $1iphone.php [L] 

RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ $1iphone.php [L] 
+0

非常感謝所有這些澄清,但是這並不能解決我主要擔心的問題:'.../path /?args'仍然沒有處理... – 1ace 2010-05-10 14:17:31

+0

我已經添加了可能的此問題修復。你是否需要重寫'.../path?args'(沒有結尾的斜槓)呢? – 2010-05-10 14:26:40

+0

我確實嘗試過,但是當我這樣做時,Apache返回500。我的猜測是'^(。*)$'進入某種循環,並且永遠不會出現。 – 1ace 2010-05-10 14:31:52

0

怎麼樣

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC] 
RewriteRule /path/index.php /path/iphone.php [QSA,L] 

編輯:QSA是Query string append,所以你不需要處理不同ently。如果你願意,你可以添加一個額外的參數太多,如:

RewriteRule /path/index.php /path/iphone.php?extra=param [QSA,L]