2012-01-02 103 views
1

我一直在研究已有应用程序的iPhone版本。mod_rewrite和iPhone重定向

我们使用一些改写规则来改善搜索引擎优化,让访问者更轻松。 例如。 http://www.site.com/index.php?job=4ef187d6e66b7改写为http://www.site.com/jobs/4ef187d6e66b7

我们还使用规则将所有iPhone用户重定向到我们的移动网站,如下:

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule .* /m/ [R] 

移动网站只是位于www.site.com/m/

但是,当我前往了http://www.site.com/jobs/4ef187d6e66b7,我越来越重定向到http://www.site.com/m/?job=4ef187d6e66b7,而应该是http://www.site.com/m/jobs/4ef187d6e66b7

有没有办法来重定向人,仍然保持一些日。现有规则? 我也想加入这个规则,但没有奏效

RewriteRule ^m/jobs/([^/]+) m/index.php?job=$1 [NC] 

这是一个完整的.htaccess

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule ^jobs/([^/]+) index.php?job=$1 [NC] 

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule .* /m/ [R] 

回答

1

你应该把iPhone重定向第一,然后将其标记“最后”。这样,移动重定向将优先于其他重定向。

RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteRule (.*) /m/$1 [R,L] 

RewriteRule ^(m/|)jobs/([^/]+) index.php?job=$2 [NC] 

另外请确保您在重定向中包含原始路径(如第三行所示)。

最后的重写规则将匹配/m/jobs/xxx以及/jobs/xxx

+0

这似乎起初工作,url不会被正确重写。 但形成一些理由似乎并没有工作:_请求的URL/m/jobs/4ef9a591edc33在此服务器上找不到._ – 2012-01-02 12:21:03

+0

这意味着重写IS工作! iPhone现在重定向到**/m /...**。您现在应该正确处理'/ m/...'URL。如果你想在最后的重写规则中加入,你应该相应地修改它。我将编辑我的答案以反映这一点。 – bouke 2012-01-02 12:48:37

+0

谢谢,重写确实有效。 我现在只是遇到了另一个问题,当我转到http://www.site.com/jobs/4ef9a591edc33时,我被重定向到了http://www.site.com/m/index。 php?job = 4ef9a591edc33 哪个是正确的url,但它应该显示为http://www.site.com/m/jobs/4ef9a591edc33 – 2012-01-02 13:19:24