我想作以下重定向(301)使用的.htaccessmod_rewrite:从URL中删除查询字符串?
*?页= 1重定向到*
(其中*是通配符)。
基本上,我只是想阻止任何人在网址的末尾访问?page = 1的页面,而是将它们指向相同的网址,然后减去?page=1
。
有没有一种快速的方法来做到这一点?
我想作以下重定向(301)使用的.htaccessmod_rewrite:从URL中删除查询字符串?
*?页= 1重定向到*
(其中*是通配符)。
基本上,我只是想阻止任何人在网址的末尾访问?page = 1的页面,而是将它们指向相同的网址,然后减去?page=1
。
有没有一种快速的方法来做到这一点?
这应做到:通过线
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
线:
page=1
以适用以下规则。如果你想重定向是临时的(302),那么你可以删除=permanent
部分。暂时移动是R
标志的默认值。
感谢您的回复!似乎无法得到那个工作,但是当我尝试访问../?page=1任何想法时似乎没有任何影响? – Freddy 2010-08-11 10:48:47
检查您的服务器是否加载了mod_rewrite,并且您的服务器设置允许您在.htaccess文件中指定这些重写设置。 – 2010-08-11 11:00:24
@Fabian - “RewriteRule”不匹配,因为每个目录('.htaccess')中测试模式的输入不包含前导斜杠。我怀疑这是这个问题。 – 2010-08-11 12:12:14
您也可以使用QSD标志(查询字符串放弃)重定向某处而不传递查询字符串。
QSD在Apache 2.4.0及更高版本中可用:http://httpd.apache.org/docs/trunk/rewrite/flags.html#flag_qsd – waraker 2014-04-01 20:44:05
对于剥离整个查询字符串,这将是不够的:
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]
好的答案:D我相信它也可能是''RewriteRule^$ {REQUEST_URI}?'' – ncomputers 2017-05-26 04:34:07
如果你是在Apache 2.4,您可以简单地使用QSD(查询字符串丢弃标志),丢弃你的目标网址的具体查询字符串。
这里是Apache 2.4用户一个例子:
旧的URL: - /富/酒吧/页= 1
新网址: - /富/酒吧/
htaccess的代码:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule^%{REQUEST_URI} [L,R,QSD]
的规则将上述任何URI重定向与?page = 1删除查询字符串。此示例将在Apache版本低于2.4时返回500错误,因为它们不支持QSD。
在较低版本的Apache上,您可以使用一个空的问号?在目标网址的末尾以移除查询字符串。
一个例子:
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule^%{REQUEST_URI}? [L,R]
上面的例子作品几乎在Apache的所有版本。
(希望对您有所帮助!)
好问题:D – ncomputers 2017-05-26 04:30:40