重写规则的结果是';找不到页面';在https页面上


rewriting rules end up with 'page not found' on https pages

我的站点上有多个重写规则,如下所示

 ^product/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)$ /index.php?action=product&category=$1&type=$2

我还安装了自签名的ssl证书,还有一些php重定向到https的页面。当我在这样的https页面上点击一个符合上述重写规则的链接时,我会出现在"未找到"错误页面上

如何告诉apache,所有重写规则都应该相对http读取,而不是https?

编辑:我通过在443 Virtual Host 下添加重写规则的副本来解决这个问题

假设您的Apache在标准端口上提供HTTPS服务,您可以在规则之前添加一个条件:

RewriteCond %{SERVER_PORT} =443
RewriteRule ...

编辑:还有另一个变量,你可以检查(它也在文档中):

HTTPS

如果连接使用SSL/TLS,则包含文本"on",否则包含文本"off"。(无论是否加载mod_ssl,都可以安全地使用此变量)。

因此,无论在哪个端口上交付SSL,这都应该更好:

RewriteCond %{HTTPS} =off
RewriteRule ...

您可以尝试:

RewriteCond %{HTTPS} on

看看htaccess HTTPS/SSL提示、技巧和黑客