我正在尝试将所有传入的请求转发到https,除非URL在URL中包含/ axis2(http:// locatlhost / axis2)。这就是我写的(在httpd.conf file
中):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/axis2$ [NC]
RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
这不起作用,我无法调试原因。任何人都可以帮助我。
答案 0 :(得分:1)
您是否为端口VirtualHost
设置了单独的443
?
如果是,请尝试从__default__
设置的VirtualHost
/ ssl.conf
指令中移除VirtualHost
指令中的ssl
。
这应该是这样的:
<VirtualHost _default_:443>
首先,我建议您在VirtualHost
中添加此内容。要记录活动或mod_rewrite
。它有助于调试并使RewriteLogLevel
更好地进行调试。
RewriteEngine On
RewriteLog "/path/to/your/rewrite.log"
RewriteLogLevel 3
要禁用重写操作的日志记录,只需将Level设置为0.这将禁用所有重写操作日志。 对Level使用较高的值会大大减慢Apache服务器的速度!仅在大于2的级别使用重写日志文件进行调试!
请尝试以下问题:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/?axis2/(?:.*)$ [NC]
RewriteRule ^(.*)(/?axis2/)(.*)$ https://$1$2$3 [L,R=301]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING} [L,QSA,R=301]
如果%{REQUEST_URI}
没有以/axis2
或axis2/
或/axis2/
或axis2
开头和结尾,则会将您的URI重定向到https
并停止任何进一步的规则重写。
否则,只会执行此操作:
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING} [L,R=301]
R = 301表示永久重定向。如果仅指定R,则将执行临时重定向,即302。