apache mod_rewrite:从URL中删除查询字符串?

xdyibdwo  于 6个月前  发布在  Apache
关注(0)|答案(4)|浏览(74)

我正在尝试使用.htaccess进行以下重定向(301)

  • ?page=1 redirects to *

(其中 * 是一个符号)。
基本上,我只是想阻止任何人访问URL末尾带有?page=1的页面,而是将他们引导到相同的URL减去?page=1
有没有一个快速的方法来做到这一点?

zaq34kh6

zaq34kh61#

这应该可以做到:

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

字符串
一行接一行:
1.您打开重写功能。
1.您可以指定一个条件(“if语句”),即查询字符串必须正好是page=1,才能应用以下规则。
1.然后指定一个规则,用它本身($1)替换整个路径(.*),但使查询字符串为空(?),并使结果成为永久重定向(301)。
如果你希望重定向是临时的(302),那么你可以删除=permanent部分。临时移动是R标志的默认值。

5f0d552i

5f0d552i2#

您还可以使用QSD标志(查询字符串丢弃)重定向到某处,而不传递查询字符串。

biswetbf

biswetbf3#

如果您使用的是Apache 2.4,您可以简单地使用QSD(查询字符串丢弃标志)来丢弃目标URL中的特定查询字符串。
下面是一个针对Apache 2.4用户的示例:

旧网址:-/foo/bar/?page=1
新URL:-/foo/bar/

.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。

qzlgjiam

qzlgjiam4#

对于剥离整个查询字符串,这就足够了:

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

字符串

相关问题