在我的服务器apache中,我需要重定向.conf文件中的URL。在位于http.conf
的文件/etc/httpd/conf
中,其中一行包含以下配置:
Include conf.d/*.conf
在文件夹中,该设置表明,在/etc/httpd/conf.d
中,我有一个名为redirect.conf
的文件,其中包含以下重定向代码:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
RewriteRule ^/?abracar/?$ /abracar? [L,R=301]
RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
RewriteRule ^/?presente/decoracao/teu-sorriso/?$ /presente/decoracao/teu-sorriso? [L,R=301]
RewriteCond %{QUERY_STRING} ^p=2&PageSpeed=noscript$ [NC]
RewriteRule ^/?acessorios/confeitaria.html/?$ /acessorios/confeitaria.html? [L,R=301]
</IfModule>
此代码应将URL https://example.com/abracar?PageSpeed=noscript
重定向到https://example.com/abracar
,但是它不起作用。如果我将此代码放入我的.htaccess
文件中,它将正常工作,但是由于外部因素,我需要将此重定向放入单独的.conf
文件中。我尝试了几种不同的配置,已经进行了很多研究,但是没有什么可以帮助我解决这个问题。预先感谢!
答案 0 :(得分:2)
我想最简单的解决方案是完全删除查询字符串?!
请注意,QSD需要Apache 2.4或更高版本。
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^PageSpeed=noscript$ [NC]
RewriteRule ^ %{REQUEST_URI} [QSD,L,R=301]
</IfModule>
添加了更通用,更容易理解的版本(对于人类):
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} .+
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [QSD,L,R=301]
</IfModule>
。+是and查询字符串的通用形式,不能为NULL。现在RewriteRule列出了URL的所有部分,但我坚持使用^%{REQUEST_URI}作为真实版本,因为这两个版本都只是将每个URL都重写为其自身。