簡體   English   中英

正則表達式 - 如何匹配除特定模式之外的所有內容

[英]Regex - how to match everything except a particular pattern

我正在使用 Apache,我想將所有收到的請求重定向到 ssl 虛擬主機。

所以我在常規 http 虛擬主機中有以下行:

RedirectMatch (.*) https://www.mydomain.com $1

這基本上用所有東西代替了 1 美元。

它完美地工作。 但是現在,我需要訪問無法在 SSL 虛擬主機上的特定 CGI。 所以我想重定向所有請求,除了以下內容:

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

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

謝謝。 阿蘭

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

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

我相信 RedirectMatch 是一筆短路交易 這意味着,如果您在全匹配之前放置另一個 RedirectMatch,則只會執行第一個匹配。 所以像...

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

前面的答案是正確的,但如果明天又出現一個例外呢? 你會得到一個胖的,難以理解的正則表達式。 使用帶有 Apache 內部變量的If指令表達式更好(更易於理解和維護)。

<If "%{REQUEST_URI} !~ m#^/mycgi/cgi.php$# && \
     %{REQUEST_URI} !~ m#^/anothercgi/cgi.php$#">
    RedirectPermanent / https://%{HTTP_HOST}/%{REQUEST_URI}
</If>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM