【问题标题】:Matching HTTP_HOST in rewriteCond?在 rewriteCond 中匹配 HTTP_HOST?
【发布时间】:2021-03-03 16:19:28
【问题描述】:

我有两台服务器正在为我的应用程序运行。

prod 和 staging 如下。

如果 HTTP_HOST 匹配 www.sitedomain.com 或 stage.sitedomain.com,我需要执行一些重定向规则

如果网址是https://www.sitedomain.com/us-en,页面应该重定向到https://www.sitedomain.us/

如果 URL 是 https://stage.sitedomain.com/us-en,页面应该重定向到 https://stage.sitedomain.us/

我正在执行以下步骤

RewriteCond %{HTTP_HOST} ^www\.sitedomain\.com$ [NC]                                  1
RewriteRule ^/us-en/(.*)$   https://www.sitedomain.us/$1      [R=301,L,NC]            2

RewriteCond %{HTTP_HOST} ^stage\.sitedomain\.com$ [NC]                                 3
RewriteRule ^/us-en/(.*)$   https://stage.sitedomain.us/$1      [R=301,L,NC]           4

问题是每当我点击https://stage.sitedomain.com/us-en时,我都会重定向到https://www.sitedomain.us/,而不是https://stage.sitedomain.us(简单地说它永远不会到达第3行)

所以第 1 行始终执行为 True,并在第 2 行为阶段 URL 执行重写规则。

谁能帮我解决这个问题?

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite url-rewriting


    【解决方案1】:

    对于您显示的示例,您能否尝试以下操作。确保这是您的 htaccess 规则文件的第一条规则。请在测试您的 URL 之前清除您的浏览器缓存。

    RewriteEngine ON
    RewriteCond %{HTTP_HOST} ^(www|stage)\.(sitedomain\.com)$ [NC]
    RewriteRule ^([^-]*)-.*/?$ https://%1.%2.$1/ [NE,R=301,L]
    


    如果您只想将这些规则应用于 un-es 网址然后尝试遵循,请确保您一次使用上述规则或以下规则。

    RewriteEngine ON
    RewriteCond %{HTTP_HOST} ^(www|stage)\.(sitedomain\.com)$ [NC]
    RewriteRule ^(us)-en/?$ https://%1.%2.$1/ [NE,R=301,L]
    

    【讨论】:

    • @saravanan baskar,你能告诉我这是否对你有用吗?
    • 是的,Ravinder 这个解决方案解决了我的问题......实际上花了几个小时在这上面......非常感谢......但是你有什么理由说明我上面提到的代码不起作用正如预期的那样......
    • @saravananbaskar,我可以在其中看到 2 个主要内容,一个是未正确使用正则表达式,第二个是您的 RewriteRule 部分检查 ^/ 这是不正确的,它不从 @987654324 开始匹配@因此它在任何情况下都不会匹配它欢呼和快乐的学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    相关资源
    最近更新 更多