2010-12-02 44 views
1

我有一種情況,我嘗試使用Apache的RedirectMatch指令將所有用戶重定向到HTTPS URL ,但只有一個(Linux)用戶訪問自己的網絡空間的。我已經發現了一張正則表達式的代碼,否定了用戶名:否定Apache中的用戶空間URL

^((?!andy).)*$ 

但是當我嘗試在指令中使用它:

RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

的網址:

http://www.example.com/~andy/ 

仍然得到重定向到HTTPS URL:

https://www.example.com/ 

當我想讓它忽略重定向。 我不是在正則表達式(或Apache)的專家,所以在得到這個工作的任何幫助,將不勝感激。

感謝, 斯蒂芬

編輯: OK,情節變厚...如果我註釋掉行:

# RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

,並重新啓動Apache,然後嘗試的網址:

http://www.example.com/andy 

我得到一個404響應,預計。但是,如果我嘗試的網址:

http://www.example.com/~andy 

重定向被觸發,我重定向到:

https://www.example.com/ 

,正如我所說,重定向被註釋掉了,我已經重新啓動服務器。這怎麼會發生?所以這不僅僅是一個正則表達式,看起來Apache沒有指令就重定向了!

+0

小心:`^((?!安迪))* $`不*包含*`andy`任何地方的字符串匹配,所以它也將在觸發`蘭迪`等我不能解釋你看到的行爲,雖然。 – 2010-12-02 10:17:53

回答

0

這可能與此有關嗎? (使用了mod_rewrite不是mod_alias中)

RewriteCond %{REQUEST_URI} !^/~andy(/|$) ... 
RewriteCond %{SCRIPT_URI} ^http: 
RewriteRule ^/(.*) https://mysite.com/$1 [R=307]
+0

謝謝您的回覆。這似乎與RedirectMatch完全相同。我認爲用戶網站空間必須以不同的方式處理。如果我使用http://www.example.com/~qwerty(不是一個真正的用戶網絡空間)的正則表達式的作品,我不重定向。 – LostInTheWoods 2010-12-02 11:20:38