2011-07-02 35 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] 

这是好的做法吗?我很新(很明显)。