2013-03-02 69 views
1

工作,我配置了以下重定向:不重定向在Apache中

<VirtualHost ...> 
    <Directory ...> 

    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^(myapp/login) https://%{HTTP_HOST}:443/$1 [NC,R=301,L] 

但它不重定向。我如何解決它?

+0

通過啓用RewriteLog進行故障排除。但是,我只是添加一個前導'/'到'^ /(myapp/login)' – Wrikken 2013-03-05 23:46:56

+0

就是這樣!如果你回答它,我會給你賞金 – xain 2013-03-09 16:36:49

+0

好的,詳細闡述了一個,但是關於如何和爲什麼。 – Wrikken 2013-03-09 16:57:19

回答

2

一般調試:如果你有機會獲得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) 
0

我認爲否定詞典相等運算符可能會有一些問題。我在mod_rewrite文檔或其他地方找不到任何禁止使用的東西,但我也沒有看到使用!=的示例。事實上,文件表明,它應該工作,但你可以嘗試只匹配「關」,而不是「不」,就像這樣:

RewriteCond %{HTTPS} off 

如果是這樣的話,那將是非常難以解決使用通常的方法(例如,使用RewriteLog)。

1

對於我來說,下面的代碼工作(我認爲這與的組合做=(如@jason表示)和端口

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(myapp/login) https://%{HTTP_HOST}/$1 [R=301,L,NC]