2010-04-26 50 views
5

我正在使用Apache,我希望將所有收到的請求重定向到ssl虛擬主機。正則表達式 - 如何匹配除特定模式以外的所有內容

所以我在普通的HTTP虛擬主機下面一行:

RedirectMatch https://www.mydomain.com $ 1

其basicaly通過一切替換$ 1(*)。

它完美的作品。但現在,我需要訪問不能在SSL虛擬主機上的特定CGI。所以,我想重定向所有請求,除了以下:

http://www.mydomain.com/mycgi/cgi.php

我在這個論壇上搜索,發現關於正則表達式排除一些帖子,但沒有工作。任何幫助將不勝感激。

謝謝。 Alain

回答

2

Apache 2.2及更高版本在正則表達式中具有負向預見支持。如果你使用的是Apache 2.2或更高版本,這應該可以工作:

RedirectMatch ^/(?!mycgi/cgi.php)(.*) https://www.mydomain.com/$1 
+0

非常感謝。它完美的作品。您在30分鐘內解決了我近8小時的工作! – Alain 2010-04-26 22:56:59

+0

如果URL是:mycgitest/cgi.php,它可以工作嗎? – Felix 2013-06-07 06:22:36

1

我相信RedirectMatch是一個short-circuit sorta deal。這意味着,如果你把另一個RedirectMatch放在你的匹配之前,那麼只有第一個匹配會被執行。所以類似...

RedirectMatch (/mycgi/cgi.php) http://www.mydomain.com$1 
RedirectMatch (.*) https://www.mydomain.com$1 
+0

+1你打我幾秒鐘。你的第一條規則應該重定向到'http',你也可以爲它添加一個前導'/'。 – 2010-04-26 20:37:20

+0

第一條規則不會導致重定向循環嗎? – 2010-04-26 20:57:00

+0

哇...它快!但不幸的是,通過將這一行放入我的「普通非SSL」虛擬主機中,它不起作用。 Firefox給我那個錯誤:Firefox已經檢測到服務器以永遠不會完成的方式重定向這個地址的請求。 我認爲這很正常,因爲我們要求Apache做重定向。所以Apache接收請求,將其與第一個正則表達式匹配,然後重定向到自己,再次匹配,等等。你的想法? 我嘗試將該行放入我的SSL虛擬服務器,但它被忽略。 Alain – Alain 2010-04-26 21:20:50

相關問題