我正在尝试使用.htaccess进行以下重定向(301)
(其中 * 是一个符号)。基本上,我只是想阻止任何人访问URL末尾带有?page=1的页面,而是将他们引导到相同的URL减去?page=1。有没有一个快速的方法来做到这一点?
?page=1
zaq34kh61#
这应该可以做到:
RewriteEngine On RewriteCond %{QUERY_STRING} ^page=1$ RewriteRule (.*) $1? [R=permanent]
字符串一行接一行:1.您打开重写功能。1.您可以指定一个条件(“if语句”),即查询字符串必须正好是page=1,才能应用以下规则。1.然后指定一个规则,用它本身($1)替换整个路径(.*),但使查询字符串为空(?),并使结果成为永久重定向(301)。如果你希望重定向是临时的(302),那么你可以删除=permanent部分。临时移动是R标志的默认值。
page=1
=permanent
R
5f0d552i2#
您还可以使用QSD标志(查询字符串丢弃)重定向到某处,而不传递查询字符串。
QSD
biswetbf3#
如果您使用的是Apache 2.4,您可以简单地使用QSD(查询字符串丢弃标志)来丢弃目标URL中的特定查询字符串。下面是一个针对Apache 2.4用户的示例:
旧网址:-/foo/bar/?page=1新URL:-/foo/bar/
/foo/bar/?page=1
/foo/bar/
.htaccess代码:
.htaccess
RewriteEngine on RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC] RewriteRule ^ %{REQUEST_URI} [L,R,QSD]
字符串上面的规则将重定向任何带有?page=1的URI以删除查询字符串。这个例子将在Apache 2.4以下的版本上返回500错误,因为它们不支持QSD。在较低版本的Apache上,您可以在目标URL的末尾使用空问号?来删除查询字符串。一个例子:
?
RewriteEngine on RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC] RewriteRule ^ %{REQUEST_URI}? [L,R]
型上面的例子几乎适用于所有版本的Apache。
qzlgjiam4#
对于剥离整个查询字符串,这就足够了:
RewriteRule ^(.*) http://example.com/$1? [R=301,L]
字符串
4条答案
按热度按时间zaq34kh61#
这应该可以做到:
字符串
一行接一行:
1.您打开重写功能。
1.您可以指定一个条件(“if语句”),即查询字符串必须正好是
page=1
,才能应用以下规则。1.然后指定一个规则,用它本身($1)替换整个路径(.*),但使查询字符串为空(?),并使结果成为永久重定向(301)。
如果你希望重定向是临时的(302),那么你可以删除
=permanent
部分。临时移动是R
标志的默认值。5f0d552i2#
您还可以使用
QSD
标志(查询字符串丢弃)重定向到某处,而不传递查询字符串。biswetbf3#
如果您使用的是Apache 2.4,您可以简单地使用
QSD
(查询字符串丢弃标志)来丢弃目标URL中的特定查询字符串。下面是一个针对Apache 2.4用户的示例:
旧网址:-
/foo/bar/?page=1
新URL:-
/foo/bar/
.htaccess
代码:字符串
上面的规则将重定向任何带有
?page=1
的URI以删除查询字符串。这个例子将在Apache 2.4以下的版本上返回500错误,因为它们不支持QSD
。在较低版本的Apache上,您可以在目标URL的末尾使用空问号
?
来删除查询字符串。一个例子:
型
上面的例子几乎适用于所有版本的Apache。
qzlgjiam4#
对于剥离整个查询字符串,这就足够了:
字符串