apache mod_rewrite的问题

时间:2012-01-23 15:14:51

标签: apache mod-rewrite https url-rewriting

我正在尝试将所有传入的请求转发到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]

这不起作用,我无法调试原因。任何人都可以帮助我。

1 个答案:

答案 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

来自RewriteLogLevel Docs

  

要禁用重写操作的日志记录,只需将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}没有以/axis2axis2//axis2/axis2开头和结尾,则会将您的URI重定向到https并停止任何进一步的规则重写。

否则,只会执行此操作:

RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING} [L,R=301]

R = 301表示永久重定向。如果仅指定R,则将执行临时重定向,即302。