apache - 在 rewriteCond 中匹配 HTTP_HOST?

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

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

产品和暂存如下。

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

如果 URL 是 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 执行,并在为阶段 URL 执行的第 2 行重写规则。

谁能帮我解决这个问题吗?

最佳答案

根据您显示的示例,您可以尝试以下操作吗?确保这是 htaccess 规则文件的第一条规则。在测试您的网址之前,请清除您的浏览器缓存。

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]

关于apache - 在 rewriteCond 中匹配 HTTP_HOST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66460944/

相关文章:

php - 如何在 .htaccess 中隐藏 .php 扩展名

python - 如何临时将 Django 站点移动到子目录中(用于测试)?

apache - .htaccess 不适用于 Windows

php - htaccess 或 php 重定向到此任务?

redirect - nginx 静态索引重定向

Android HTTPS 错误没有受信任的服务器证书

php - 服务器证书不包含与服务器名称匹配的 ID

linux - htaccess 重写规则 windows/linux ,域到子页面

apache - NGINX 和 APACHE 在一起还是只有 NGINX?

apache - 自动 Apache 服务器维护页面