【问题标题】:mod_rewrite and iPhone redirectmod_rewrite 和 iPhone 重定向
【发布时间】:2012-01-02 12:01:00
【问题描述】:

我一直在开发现有应用程序的 iPhone 版本。

我们使用一些重写规则来获得更好的 SEO 并让访问者更轻松。 例如。 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]

【问题讨论】:

    标签: iphone .htaccess


    【解决方案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

    【讨论】:

    • 起初似乎可行,但网址未正确重写。但出于某种原因,它似乎不起作用:在此服务器上找不到请求的 URL /m/jobs/4ef9a591edc33。
    • 这意味着重写工作正常! iPhone 现在被重定向到 /m/...。您现在应该正确处理/m/... URL。如果你想赶上最后的重写规则,你应该相应地修改它。我将编辑我的答案以反映这一点。
    • 谢谢,重写确实有效。我现在遇到了另一个问题,当我转到 site.com/jobs/4ef9a591edc33 时,我被重定向到 site.com/m/index.php?job=4ef9a591edc33 这是正确的 url,但它应该显示为 site.com/m/jobs/4ef9a591edc33
    • 您是否在 RewriteRule 中使用了L(最后一个)指令(见第 3 行)?
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 2012-05-31
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2012-07-13
    相关资源
    最近更新 更多