Apache-2.2

Apache 重定向 - 刪除所有查詢

  • May 25, 2018

我正在嘗試刪除 URL 中的所有查詢:

  • https://api.myserver.com/image.png?arg=0應該成為
  • https://api.myserver.com/image.png

我用這個:

RewriteCond      %{QUERY_STRING}    ^arg=0$
RewriteRule      (.*)               $1?     [R=permanent]

這是結果:

https://api.myserver.com/home/usrn32/domains/myserver.com/public_html/image.png

所以參數被刪除,但路徑是絕對的而不是相對的。另外,我想擷取所有arg數字,而不僅僅是0.

如何?

看起來這是在目錄上下文中。在這種情況下,$1反向引用不包含斜杠前綴(因為RewriteRule 模式匹配的 URL 路徑不包含斜杠前綴),因此它被視為相對路徑替換。當它是relative時, mod_rewrite 將目錄前綴(即/home/usrn32/domains/myserver.com/public_html/)添加到替換中。

您需要在susbtitution上顯式包含斜杠前綴(或使用RewriteBase指令),以便它不再是relative。例如:

RewriteRule      (.*)               /$1?     [R=permanent,L]

此外,您可能希望包含該L標誌,以防止進一步重寫(如果有的話)。

另外,我想擷取所有 arg 數字,而不僅僅是 0。

將您的CondPattern ( ^arg=0$)修改為^arg=\d+$(1 位或更多位)。

總之:

RewriteCond      %{QUERY_STRING}    ^arg=\d+$
RewriteRule      (.*)               /$1?     [R=permanent,L]

刪除所有查詢

如果您確實想刪除所有查詢字元串參數,那麼您可以將CondPattern更改為僅一個點(即。.)以匹配任何字元。

引用自:https://serverfault.com/questions/913770