[英]Unescapable Periods in Apache 2.0 RewriteRule Regex
所以,我有以下RegEx ..
RewriteRule ^([-a-z0-9]*[A-Z\.]+.*)$ file.php?string=$1 [QSA]
我希望file.php
觸發的URL必須包含大寫字母或句點,然后將URL發送到PHP腳本。
但是,我遇到的問題是這個腳本在任何 URL上觸發,因為沒有真正轉義的Period。
我試過用反斜杠或兩個反斜杠或者三個反轉來逃避這個時期...但沒有一個停止通用的解釋。
我究竟做錯了什么?
編輯:舉個例子,
RewriteRule ^([-a-z0-9]*[A-Z\\.]+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
不起作用,但是
RewriteRule ^([-a-z0-9]*\\.+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
確實逃脫了它。
編輯2:我想重定向的URL示例:
而我沒有:
編輯3:舊正則表達式是:
RewriteRule ^([-a-z0-9]*[A-Z\.]+[-a-z0-9\/]*)$ file.php?string=$1 [QSA]
但在撰寫帖子時,我將問題的正則表達式更新為您在上面看到的內容。
嘗試:
RewriteCond %{REQUEST_URI} [A-Z] [OR]
RewriteCond %{REQUEST_URI} \.html$
RewriteRule (.*) file.php?string=$1 [QSA]
當使用mod_rewrite並且你有幾個匹配的URL時,最好使用RewriteCond
過濾然后應用你的RewriteRule
。
我不認為你的問題可能是你的想法:字符類中的句點應該是字面句,而不是“任何字符”。 如果這確實是問題,那么你可以將[AZ\\.]+
更改為([AZ]|\\.)+
; 但我對此表示懷疑。 有些事要嘗試:
QSA
更改為QSA,R
,如果您將其設為真正的HTTP重定向會發生什么? 目標網址是否與您期望的一樣? 也許有一些意想不到的句號或大寫字母? (警告:如果您在瀏覽器中嘗試,這很可能會觸發無限重定向循環;嘗試通過端口-80 Telnet提交請求並查看實際的HTTP響應可能會更容易。) 此外,您的規則與您描述的方式不完全一致。 例如,您的規則與abc
類的URL不匹配,因為您只在單個“clump”中出現大寫字母和/或點; 如果它們被小寫字母分隔,則不會發生匹配。 那是因為你不想讓描述過於復雜嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.