Fre*_*ddy 30 apache .htaccess mod-rewrite redirect
我正在尝试使用.htaccess进行以下重定向(301)
*?page = 1重定向到*
(其中*是通配符).
基本上,我只是想阻止任何人访问URL末尾的页面= 1的页面,而是将它们指向相同的网址减去?page=1.
有这么快的方法吗?
Fab*_*olm 43
这应该这样做:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
Run Code Online (Sandbox Code Playgroud)
逐行:
page=1符合以下要应用的规则作为条件("if语句").如果您希望重定向是临时的(302),那么您可以删除该=permanent部件.暂时移动是R标志的默认值.
Did*_*olo 22
您还可以使用QSD标志(查询字符串丢弃)重定向某处而不传递查询字符串.
如果您使用的是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]
Run Code Online (Sandbox Code Playgroud)
上面的规则将使用?page = 1重定向任何uri 以删除查询字符串.此示例将在2.4版本的Apache版本上返回500错误,因为它们不支持QSD.
在较低版本的Apache上,您可以使用空白问号?在目标网址的末尾删除查询字符串.
一个例子 :
RewriteEngine on
RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]
Run Code Online (Sandbox Code Playgroud)
上面的示例几乎适用于所有版本的apache.
(希望这可以帮助!)
对于剥离整个查询字符串,这就足够了:
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]
Run Code Online (Sandbox Code Playgroud)