【问题标题】:htaccess mod_rewrite subdomainhtaccess mod_rewrite 子域
【发布时间】:2013-08-04 16:18:26
【问题描述】:

我有一个移动 url,我想重定向到子域 m。

即example.com/mobile 到 m.example.com

但是,当我有网址 example.com/mobile/boston_resources/

它重定向到 m.example.com/mobile/boston_resources/?city=boston (而不是 m.example.com/mobile/boston_resources/)

我正在使用:

 RewriteCond %{QUERY_STRING}  page=[1-9]+        [NC,OR]
 RedirectMatch 301 ^/mobile/(.*)$ http://m.example.com/$1

任何帮助表示赞赏

【问题讨论】:

    标签: .htaccess subdomain


    【解决方案1】:

    在您的匹配项中添加尾随 ? 以删除任何存在的查询字符串

    RedirectMatch 301 ^/mobile/(.*)$ http://m.example.com/$1?
    

    其次,RewriteCond 不适用于RedirectMatch,而是RewriteRule

    RewriteCond %{QUERY_STRING}  page=\d+ [NC]
    RedirectRule ^mobile/(.*)$ http://m.example.com/$1? [R=301,L]
    

    [OR] 已被删除,因为只有一个 RewriteCond[1-9]+ 已更改为包含 10 等。请注意,放置 RewriteCond 表示只有在查询字符串中有 page= 时才会重定向.如果您无论如何都需要重定向,请删除条件并保留规则。

    【讨论】:

    • 除此之外,我注意到 example.com/mobile/boston_resources/ 使用我的脚本在没有 www 的情况下正确重定向
    • @martyn,(1)你忘了告诉你哪种方法给了你内部错误。 (2) 当需要重定向的 URL 没有 page= 时,你能告诉你为什么要检查它们吗? (3) 您是否也有多个 .htaccess 文件,例如子目录中的文件? (4) 任何关于可以添加 ?city=boston 的猜测,因为这似乎是特定于应用程序的。
    • RewriteCond %{QUERY_STRING} page=\d+ [NC] RedirectRule 301 ^mobile/(.*)$ m.example.com/$1? [R=301,L] 给出了错误。有些页码也需要重定向,尽管我可以没有它。顺便说一句,我无法反转 css 缓存。在不同的浏览器上它仍然显示内部错误,我已恢复正确的 htaccess,清除缓存并使用不同的设备。我是否必须重新启动 apache 才能清除这些。
    • @martyn,我的错!请从规则中删除 301。我复制您的重定向匹配时忘记删除它。重定向代码已由规则末尾的 R=301 指定。你能测试并告诉我吗?请在我的答案末尾阅读我的更新。谢谢。
    • @martyn,我当然需要比“没用”更多的信息来帮助你。您仍然收到内部错误吗?如果您检查了多个 .htaccess 文件,您也没有回复。缓存在这里无关。
    【解决方案2】:
    RedirectMatch 301 ^/mobile/(.*)$ http://m.example.com/$1?
    

    似乎可以解决问题。我已经牺牲了页面重定向的需要。

    【讨论】:

      【解决方案3】:

      清除浏览器缓存或使用其他浏览器进行测试。

      通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

      Options +FollowSymLinks -MultiViews
      # Turn mod_rewrite on
      RewriteEngine On
      RewriteBase /
      
      RewriteCond %{QUERY_STRING} ^page=.+ [NC]
      RedirectRule ^mobile/(.*)$ http://m.example.com/$1? [R=302,L,NC]
      

      一旦您确认它工作正常,请将R=302 替换为R=301。在测试你的 mod_rewrite 规则时避免使用R=301(永久重定向)。

      【讨论】:

        猜你喜欢
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2013-01-26
        • 2013-07-14
        • 1970-01-01
        • 2012-05-28
        相关资源
        最近更新 更多