2011-07-02 38 views
0

我一直在嘗試製作我的網站的移動版本並使用htaccess文件重定向用戶。htaccess重寫規則在手機瀏覽器中不起作用

我的網站在清理URL之前使用了重寫規則,這很好。當我嘗試執行完全相同的規則但重定向到mobile.php而不是index.php時,我得到一個500內部服務器錯誤。

下面是代碼:

RewriteEngine On 

RewriteCond %{HTTP_USER_AGENT} #detect mobile browsers here... 
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^([^/]*)[/]*([^/]*)$ /index.php?r=$1&id=$2 [L] 

任何人都可以看到我的問題嗎?

回答

0

是 - 這條線,你將它張貼無效的幾個原因:

RewriteCond %{HTTP_USER_AGENT} #detect mobile browsers here... 
  1. 評論#detect mobile browsers here...只能在一條線上的第一個非空字符 - 註釋不能啓動線的中間。

  2. 由於#1,該行不完整 - 它應該有「條件模式」部分,這是缺少的(您有反饋意見)。見the docs一個完整的/正確的語法

  3. 可以進入這個規則(很多人忘記了mod_rewrite的不重寫後,它進入另一個循環重寫循環,如果你不插入適當的額外條件(RewriteCond)它可能會永久循環 - 實際上Apache會在達到極限之後破壞它,但重點仍然存在)。

0

儘管我不確定第一個代碼的問題是什麼,但我已經找到了一些能夠達到我想要達到的效果。

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^/index.php$ [OR] 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] 
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] 
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^([^/]*)[/]*([^/]*)$ /index.php?r=$1&id=$2 [L] 

這是好的做法嗎?我很新(很明顯)。