簡體   English   中英

mod_rewrite:從URL中刪除查詢字符串?

[英]mod_rewrite: remove query string from URL?

我正在嘗試使用.htaccess進行以下重定向(301)

*?page = 1重定向到*

(其中*是通配符)。

基本上,我只是想阻止任何人在URL的末尾使用?page = 1訪問頁面,而是將它們指向相同的url減去?page=1

有這么快的方法嗎?

這應該這樣做:

RewriteEngine    On
RewriteCond      %{QUERY_STRING}    ^page=1$
RewriteRule      (.*)               $1?     [R=permanent]

逐行:

  1. 您打開重寫功能。
  2. 您指定一個條件(“if語句”),查詢字符串必須完全是page=1才能應用以下規則。
  3. 然后指定一個規則,用自身($ 1)替換整個路徑(。*),但將查詢字符串設為空(?),並使結果成為永久重定向(301)。

如果您希望重定向是臨時的(302),那么您可以刪除=permanent部分。 暫時移動是R標志的默認值。

您還可以使用QSD標志(查詢字符串丟棄)重定向某處而不傳遞查詢字符串。

如果您使用的是Apache 2.4您只需使用QSD(查詢字符串放棄標記)來丟棄目標URL中的特定查詢字符串。

以下是Apache 2.4用戶的示例:

舊網址: - / foo / bar /?page = 1

新網址: - / foo / bar /

Htaccess代碼:

 RewriteEngine on

 RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI} [L,R,QSD]

上面的規則將使用?page = 1重定向任何uri以刪除查詢字符串。 此示例將在2.4版本的Apache版本上返回500錯誤,因為它們不支持QSD。

在較低版本的Apache上,您可以使用空白問號 在目標網址的末尾刪除查詢字符串。

一個例子 :

 RewriteEngine on

 RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]

上面的示例幾乎適用於所有版本的apache。

(希望這可以幫助!)

要剝離整個查詢字符串,這就足夠了:

RewriteRule ^(.*) http://domain.com/$1? [R=301,L]

暫無
暫無

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

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