在文件.conf中使用mod_rewrite重定向不起作用

时间:2019-04-24 12:22:30

标签: apache redirect mod-rewrite url-rewriting url-redirection

在我的服务器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文件中。我尝试了几种不同的配置,已经进行了很多研究,但是没有什么可以帮助我解决这个问题。预先感谢!

1 个答案:

答案 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都重写为其自身。