htaccess重写规则在移动浏览器中不起作用

时间:2011-07-02 20:51:28

标签: apache .htaccess mod-rewrite

我一直试图制作我的网站的移动版本,并使用htaccess文件重定向用户。

我的网站之前使用重写规则来清理网址,效果很好。当我尝试执行完全相同的规则但重定向到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]

有人能看到我的问题吗?

2 个答案:

答案 0 :(得分:0)

是的 - 您发布的这一行无效,原因如下:

RewriteCond %{HTTP_USER_AGENT} #detect mobile browsers here...
  1. 评论#detect mobile browsers here...只能是一行中的第一个非空字符 - 评论不能从该行的中间开始。

  2. 由于#1,这条线是不完整的 - 它应该有“条件模式”部分,它缺少(你有评论)。有关完整/正确的语法

  3. ,请参阅the docs
  4. 可能进入这条规则的重写循环(很多人忘记了在mod_rewrite重写之后,它进入另一次迭代,如果你没有插入适当的额外条件( RewriteCond)它可能永远循环 - 实际上Apache会在达到极限后将其破坏,但重点仍然存在)。

答案 1 :(得分: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]

这是好习惯吗?我很陌生(显然)。