重写规则以在 HTTP 和 HTTPS 上工作

Posted

技术标签:

【中文标题】重写规则以在 HTTP 和 HTTPS 上工作【英文标题】:Rewrite Rule to Work on HTTP and HTTPS 【发布时间】:2012-02-04 07:18:48 【问题描述】:

我有这个简单的重写规则,它在 http 下可以正常工作:

RewriteCond %HTTP_HOST ^www\.siku-siku\.com$
RewriteRule ^/work/all.html  /portfolio/ [L,R=301]

但是,当我在 https 上时,该规则并未生效。我将规则集修改为以下但无济于事。

RewriteCond %HTTPS on
RewriteCond %HTTP_HOST ^www\.siku-siku\.com$
RewriteRule ^/work/all.html  /portfolio/ [L,R=301]

如何使该规则同时适用于 httphttps?如果我需要提供更多信息,请告诉我。

【问题讨论】:

它是 .htaccess 还是 vhost?如果是虚拟主机,只需将重写规则放在一个单独的文件中,并将其源到两个虚拟主机中 这是一个虚拟主机。 @fge:您是指非ssl 和ssl 的vhost 吗?抱歉,这听起来可能很基础,但我刚刚开始熟悉 Apache mod-rewrite。 嗯,mod_rewrite 指令和其他指令一样,如果你将它们放在另一个文件中,并且 Include 这个文件来自另一个文件,它会执行此操作。所以是的,只需将规则写入另一个文件中,该文件同时包含在 SSL 和非 SSL 虚拟主机中(删除 HTTPS 上的 RewriteCond)。 +1 感谢您的进一步澄清。 【参考方案1】:

Apache 使用不同的虚拟主机进行 ssl 配置:

<IfModule mod_ssl.c>
  <VirtualHost _default_:443>
  RewriteEngine on
  RewriteCond %HTTP_HOST ^www\.siku-siku\.com$
  RewriteRule ^/work/all.html  /portfolio/ [L,R=301]
  ...
  </VirtualHost>
</IfModule>

此链接有一个在 Debian 上使用 SSL 配置 Apache 的示例,但应该很容易推断到您使用的任何平台http://www.debian-administration.org/articles/349

【讨论】:

以上是关于重写规则以在 HTTP 和 HTTPS 上工作的主要内容,如果未能解决你的问题,请参考以下文章

Azure Web App HTTP/HTTPS 重写规则

当从HTTPS协议发出请求时,IIS URL重写规则(Pattern)无法识别{HTTP_HOST}

CodeIgniter 的 Nginx 重写规则

web.config 中的 IIS 重写规则将 HTTPS 请求重定向到 HTTP

IIS URL重写https规则忽略本地主机

Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则