【问题标题】:.htaccess rewrite urls if multiple conditions are met如果满足多个条件,.htaccess 会重写 url
【发布时间】:2018-07-18 00:22:00
【问题描述】:

如果满足一些条件并且 .htaccess 中有 if/else 语句,我会尝试重写 url

如果

  • REQUEST_URI 为空或“/”
  • SERVER_NAME 不包含单词“sam”
  • SERVER_PORT 为 443。

然后在前面加上 www。到 URL 并将 /website 附加到 URL 的末尾。

否则

  • REQUEST_URI 不为空或不是'/'
  • SERVER_NAME 不包含单词“sam”
  • SERVER_PORT 为 443。

然后在前面加上 www。到网址。

这是我目前所拥有的,但我不确定这是否是正确的顺序,即使它是正确的,因为它不适合我,也不会发生重定向。

<If "%{REQUEST_URI} == '/' || %{REQUEST_URI} == ''">
    RewriteCond %{SERVER_NAME} !sam
    RewriteCond %{SERVER_PORT} 443
    RewriteRule .* https://www.%{SERVER_NAME}/website [R=301,L]
</If>
<Else>
    RewriteCond %{SERVER_NAME} !^sam
    RewriteCond %{SERVER_PORT} 443
    RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</Else>

【问题讨论】:

  • 在不知道上下文的情况下,您的第二条规则很可能会创建一个无限重定向循环。另外,您是故意使用SERVER_NAME 还是您实际上想要使用HTTP_HOST

标签: .htaccess url-rewriting


【解决方案1】:

您可以使用,无需其他测试:

RewriteCond %{SERVER_NAME} !sam
RewriteCond %{SERVER_PORT} 443
RewriteRule ^$ https://www.%{SERVER_NAME}/website [R=301,L]

RewriteCond %{SERVER_NAME} !sam
RewriteCond %{SERVER_PORT} 443
RewriteRule ^.+$ https://www.%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

【讨论】:

  • 第二条规则的无限循环来了……哎呀
  • @JustinIurman 如果服务器与端口 443 不同或不同...这不是问题的一部分,也没有足够的信息
  • Not if the server is not the same or not with port 443 -> 将始终如此,因为该规则不涉及任何相关内容。无论如何,同意其余的。 OP应该审查他的计划。此外,我怀疑 OP 将 SERVER_NAMEHTTP_HOST 混合在一起
  • 您无法知道 DNS 或配置是否将 www 重定向到另一个站点
  • 是的。但事实上,没有更多信息,提出这样一个规则有点棘手/危险
猜你喜欢
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多