工作,我配置了以下重定向:不重定向在Apache中
<VirtualHost ...>
<Directory ...>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(myapp/login) https://%{HTTP_HOST}:443/$1 [NC,R=301,L]
但它不重定向。我如何解決它?
工作,我配置了以下重定向:不重定向在Apache中
<VirtualHost ...>
<Directory ...>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(myapp/login) https://%{HTTP_HOST}:443/$1 [NC,R=301,L]
但它不重定向。我如何解決它?
一般調試:如果你有機會獲得apache配置本身,你可以啓用一個RewriteLog
,這取決於你設置的級別,可以給你一步一步的匹配,當前值和修改的細目。整個url的匹配區別host
上下文(僅在apache的配置文件中可用)或per-di .htaccess
上下文背景:
什麼是匹配?
在VirtualHost上下文中,該模式將首先與主機名和端口之後以及查詢字符串(例如「/app1/index.html」)之前的URL的部分進行匹配。
在指南和htaccess的上下文,圖案將最初被匹配針對文件系統路徑,移除導致所述服務器向所述當前重寫規則前綴後(例如,「APP1/index.html中」或「的index.html」取決於指令的定義位置)。
是,在一個VirtualHost
環境下,你有一個領先的/
,在.htcaccess
上下文(至極的淨最例子假設,因爲它更容易獲得),這兩者之間的區別,你沒有這樣的領先/
。
總之,在這裏工作的,但不會在.htaccess
工作:
^/(myapp/login)
如果你想讓它在兩種情況下匹配,使領導/
可選:
^/?(myapp/login)
我認爲否定詞典相等運算符可能會有一些問題。我在mod_rewrite文檔或其他地方找不到任何禁止使用的東西,但我也沒有看到使用!=
的示例。事實上,文件表明,它應該工作,但你可以嘗試只匹配「關」,而不是「不」,就像這樣:
RewriteCond %{HTTPS} off
如果是這樣的話,那將是非常難以解決使用通常的方法(例如,使用RewriteLog
)。
對於我來說,下面的代碼工作(我認爲這與的組合做=(如@jason表示)和端口
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(myapp/login) https://%{HTTP_HOST}/$1 [R=301,L,NC]
通過啓用RewriteLog進行故障排除。但是,我只是添加一個前導'/'到'^ /(myapp/login)' – Wrikken 2013-03-05 23:46:56
就是這樣!如果你回答它,我會給你賞金 – xain 2013-03-09 16:36:49
好的,詳細闡述了一個,但是關於如何和爲什麼。 – Wrikken 2013-03-09 16:57:19