通过 htaccess 从 301 重定向中删除查询字符串

时间:2021-06-27 15:30:35

标签: .htaccess redirect

我面临几个 301 重定向问题。

问题 1:

我想将一些链接重定向到同一站点的另一个 URL:

Redirect 301 /path-example.html /dir/subdir/

重定向正在工作,但它正在生成这样的查询字符串:

example.com/dir/subdir/?str=path-example

如何删除查询标记?str=path-example

问题 2:

我想将一些链接重定向到主页:

Redirect 301 /some-path.html /

但是它在像这样的尾部斜杠之后留下了 ?

example.com/?

如何从转发的 URL 中删除 /?

现有规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{QUERY_STRING} ^s=(.*)$
RewriteRule ^$ / [R=301,L]

谢谢!

1 个答案:

答案 0 :(得分:0)

请将这些规则放在您的 htaccess 文件的顶部(以防您有更多规则)。在测试您的网址之前,请务必清除浏览器缓存。

<IfModule mod_rewrite.c>
RewriteEngine ON
RewriteBase /

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteRule ^index\.php/?$ - [L,NC]

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


##Redirection with removing query string rule here.
RewriteCond %{THE_REQUEST} \s/[^.]*\.html\?\S+\s [NC]
RewriteRule ^ /dir/subdir? [R=301,L]

##Redirection to site's home page here for html urls.    
RewriteCond %{THE_REQUEST} \s/[^.]*\.html\s [NC]
RewriteRule ^ /? [QSD,R=301,L]

RewriteCond %{QUERY_STRING} ^s [NC]
RewriteRule ^/?$ / [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>


编辑:我的第一个没有 OP 其他规则集的答案如下:

RewriteEngine ON
##Redirection with removing query string rule here.
RewriteCond %{THE_REQUEST} \s/[^.]*\.html\?\S+\s [NC]
RewriteRule ^ /dir/subdir? [R=301,L]
##Redirection to site's home page here for html urls.    
RewriteCond %{THE_REQUEST} \s/[^.]*\.html\s [NC]
RewriteRule ^ /? [QSD,R=301,L]
相关问题