mod_rewrite和iPhone重定向

时间:2012-01-02 12:01:01

标签: iphone .htaccess

我一直在研究现有应用程序的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 个答案:

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