簡體   English   中英

Apache 2.0 RewriteRule Regex中不可避免的時期

[英]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示例:

  • /some-page-goes-here.html
  • /繼承人,剝奪/老/頁/

而我沒有:

  • /測試/一/二/
  • /an/actual-file.gif

編輯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.

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