2012-01-23 147 views
0

我想做轉發所有傳入的請求到https,除非URL包含/ axis2(http:// locatlhost/axis2)在URL中。這就是我寫(在我httpd.conf file):問題與Apache mod_rewrite

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/axis2$ [NC] 
RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R] 

這不是工作,我無法調試原因。誰能幫我。

+0

你試過從'^/axis2 $'中刪除開始的斜槓'/',所以看起來像'^ axis2 $' –

回答

1

你爲端口443單獨設置了VirtualHost嗎?

如果是嘗試在ssl.conf/VirtualHost指令由ssl設置除去從VirtualHost指令的__default__

應該看看哪些是這樣的:

所有我會建議你在你的 VirtualHost添加此的
<VirtualHost _default_:443> 

第一。記錄活動或mod_rewrite。這對於調試更有幫助,並且更高的RewriteLogLevel更適合調試。

RewriteEngine On 
RewriteLog "/path/to/your/rewrite.log" 
RewriteLogLevel 3 

RewriteLogLevel Docs

要禁用改寫簡單的設置級別爲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。

+0

感謝您的迴應!但是,這不起作用,並且要排除的URL將具有種類http:// localhost:// axis2/connector。即使我試圖打一個類型爲http:// localhost/axis2 /的URL,它也會陷入無限循環。什麼可能是這個問題? – Ankit

+0

無限循環是什麼意思?該頁面無法加載? – ThinkingMonkey

+0

是的,日誌是這樣的:初始化重寫引擎與請求的uri/axis2/ 應用模式'^(。*)$'到uri'/ axis2 /' RewriteCond:input ='/ axis2 /'pattern ='!^ /?axis2 /?$'[NC] =>不匹配 應用模式'^(。*)$'to uri'/ axis2 /' rewrite'/ axis2 /' - >'http:// localhost/axis2 /' 明確強制重定向http:// localhost/axis2/ 轉義http:// localhost/axis2 /用於重定向 重定向到http:// localhost/axis2/[REDIRECT/301] init請求uri/axis2/ 的重寫引擎將模式'^(。*)$'應用於uri/axis2 /' RewriteCond:input ='/ axis2 /'pattern ='!^ /?axis2 /?$'[NC] =>不是m – Ankit