【问题标题】:Is there a way to combine these redirects?有没有办法结合这些重定向?
【发布时间】:2015-02-16 00:14:27
【问题描述】:

我有两个重定向(一个用于 http,一个用于 https):

# Option 1a: rewrite www.example.com → example.com

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>

# Option 1b: rewrite https://www.example.com → https://example.com

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
</IfModule>

是否可以将它们结合起来,并使用一个规则集删除 http 和 https 的子域(无需指定确切的域,如当前规则)?

【问题讨论】:

  • @tzafar 是的,我已经看到了,但这需要指定域,这是我试图避免的。我已经尝试将其调整到我的用例中,但我一直在尝试使域成为变量..

标签: html apache .htaccess


【解决方案1】:

以下是如何在不对主机名进行硬编码的情况下将两个规则合二为一:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
</IfModule>

【讨论】:

  • 这对我有用,但我将重定向更改为 301 并删除了 NE 就像在原始问题中一样。除此之外,完美。
  • 是的 302 仅用于测试。验证后,您可以将其设为 301。
【解决方案2】:

试试这个

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTPS}:s on:(s)
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http%1://%2%{REQUEST_URI} [R=301,QSA,L]
</IfModule>

【讨论】:

  • 如果请求不是 https,%1 会不包含域名吗?如果没有匹配,组肯定不会被填充?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多