我在https://www.website.com
到https://website.com
的重定向上发表了以下帖子:
Issue with Let's Encrypt certificate : https://www.website.com not working with redirection to https://website.com
我无法实现这种重定向,我不明白是什么原因。
如果我键入https://www.website.com
,它将保留在https://www.website.com
上,并且不会执行到https://website.com
的重定向。
我的配置有点特殊,Zope服务器与Apache2一起工作。
现在,下面是我的重写规则(http://www.website.com
和http//website.com
都被重定向到https://website.com
):
<VirtualHost *:443>
# REWRITE to get https://www.website.com to https://website.com except for cgi-bin scripts
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/cgi-bin/search [NC]
RewriteCond %{REQUEST_URI} !^/cgi-bin/awstats [NC]
RewriteRule ^/(.*) https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]
</VirtualHost>
<VirtualHost *:80>
<IfModule mod_rewrite.c>
# www to non www for HTTP and HTTPS
RewriteCond %{REQUEST_URI} ^/www\. [NC,OR]
RewriteCond %{REQUEST_URI} !^/podcast [NC]
# Rewrite below works : redirect 80 => https
RewriteRule ^/(.*) https://website.com/$1 [R=301,L]
RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/$1 [P,L]
</IfModule>
</VirtualHost>
这里有什么问题吗?
2条答案
按热度按时间0ejtzxu11#
我相信有few things of note:
1.一个或多个RewriteCond可以位于RewriteRule指令之前。只有当URI的当前状态与其模式匹配,并且满足这些条件时,才使用以下规则。
1.在VirtualHost上下文中,模式最初将与URL中位于主机名和端口之后、查询字符串之前的部分(例如“/app1/index.html”)进行匹配。这是(%解码的)URL路径。
1.如果您希望匹配主机名、端口或查询字符串,请分别使用带有%{HTTP_HOST}、%{SERVER_PORT}或%{QUERY_STRING}变量的RewriteCond。
你还利用了L| last标志,这使引擎在运行
RewriteRule
后停止处理更多规则。以上几种方式让您了解引擎是如何运行重写的:
1.按顺序处理
RewriteRules
(除非您指定L
标志,您将对所有规则执行此操作)1.每个
RewriteRule
可以有多个RewriteCond
,在考虑RewriteRule
之前,所有的RewriteCond
都必须匹配。这也意味着RewriteCond
必须对每个RewriteRule
单独重复(然而,有一个有趣的技术可以将RewriteRules分组到if-then-else块中)1.在您的情况下(
VirtualHost
上下文),默认情况下仅匹配URL路径,除非您手动匹配HTTP_HOST
变量。考虑到这一点,我发现重写规则存在一些问题(为了可读性,我交换了http和https vhosts,但这并不重要):
据我所知,没有重写
https://www.website.com -> https://website.com
的规则,您的https重写检查的唯一位是/cgi-bin
我的建议沿着(这可能不是一个复制和粘贴的解决方案,但希望你已经得到了要点):
eoxn13cs2#
我也遇到了同样的问题,因为只有一个网站实际上托管在亚马逊lightsail bitnami实现上。
注解掉该行之后
在/opt/bitnami/apache 2/conf/httpd.conf文件中,这个问题得到了解决。