重写规则以在 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]
如何使该规则同时适用于 http 和 https?如果我需要提供更多信息,请告诉我。
【问题讨论】:
它是 .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 上工作的主要内容,如果未能解决你的问题,请参考以下文章
当从HTTPS协议发出请求时,IIS URL重写规则(Pattern)无法识别{HTTP_HOST}
web.config 中的 IIS 重写规则将 HTTPS 请求重定向到 HTTP
Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则