我正在尝试使用.htaccess
进行以下重定向(301)*?page = 1重定向到*
(其中*是通配符)。
基本上,我只想阻止任何人在网址末尾使用?page = 1访问某个网页,而是将其指向相同的网址减去?page=1
。
有快速的方法吗?
答案 0 :(得分:41)
这应该这样做:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
逐行:
page=1
才能应用以下规则。如果您希望重定向是临时的(302),那么您可以删除=permanent
部分。暂时移动是R
标志的默认值。
答案 1 :(得分:19)
你也可以使用QSD标志(查询字符串丢弃)重定向某个地方而不传递查询字符串。
答案 2 :(得分:8)
如果您使用的是Apache 2.4您可以使用QSD(查询字符串放弃标记)来丢弃目标网址中的特定查询字符串。
以下是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,以删除查询字符串。此示例将在Apache版本下面返回500错误,因为它们不支持QSD。
在较低版本的Apache上,您可以在目标网址的末尾使用空白问号?来移除查询字符串。
一个例子:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]
上面的示例几乎适用于所有版本的apache。
(希望这会有所帮助!)
答案 3 :(得分:4)
对于剥离整个查询字符串,这就足够了:
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]