Apache 在文件.conf中使用mod_rewrite重定向无效

Apache 在文件.conf中使用mod_rewrite重定向无效,apache,redirect,mod-rewrite,url-rewriting,url-redirection,Apache,Redirect,Mod Rewrite,Url Rewriting,Url Redirection,在apache服务器中,我需要重定向.conf文件中的URL。在我位于/etc/httpd/conf的文件http.conf中,其中一行包含以下配置: Include conf.d/*.conf 在文件夹中,设置表明,在/etc/httpd/conf.d中,我有一个名为redirect.conf的文件,其中包含以下重定向代码: <IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On

在apache服务器中,我需要重定向.conf文件中的URL。在我位于
/etc/httpd/conf
的文件
http.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>

选项+FollowSymLinks
重新启动发动机
RewriteCond%{QUERY_STRING}^PageSpeed=noscript$[NC]
重写规则^/?abracar/?$/abracar?[L,R=301]
RewriteCond%{QUERY_STRING}^PageSpeed=noscript$[NC]
重写规则^/?Presenter/decoracao/teu sorriso/?$/Presenter/decoracao/teu sorriso?[L,R=301]
RewriteCond%{QUERY_STRING}^p=2&PageSpeed=noscript$[NC]
重写规则^/?acessorios/confeitaria.html/?$/acessorios/confeitaria.html?[L,R=301]

此代码应重定向URL
https://example.com/abracar?PageSpeed=noscript
https://example.com/abracar
,但它不起作用。如果我将此代码放在
.htaccess
文件中,它将正常工作,但由于外部因素,我需要将此重定向放在一个单独的
.conf
文件中。我已经尝试了几种不同的配置,我已经研究了很多,但是没有什么可以帮助我解决这个问题。提前谢谢

我想最简单的解决方案是完全删除查询字符串

请注意,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>

选项+FollowSymLinks
重新启动发动机
RewriteCond%{QUERY_STRING}^PageSpeed=noscript$[NC]
重写规则^%{REQUEST_URI}[QSD,L,R=301]
增加了一个更通用、更容易理解的版本(适用于人类):


选项+FollowSymLinks
重新启动发动机
重写cond%{QUERY_STRING}+
重写规则。*https://%{HTTP_HOST}%{REQUEST_URI}[QSD,L,R=301]

.+是非空的and查询字符串的通用形式。重写规则现在列出了URL的所有部分,但对于真正的版本,我坚持使用^%{REQUEST_URI},因为两个版本都只是将每个URL重写为自身。

我想最简单的解决方案是完全删除查询字符串

请注意,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>

选项+FollowSymLinks
重新启动发动机
RewriteCond%{QUERY_STRING}^PageSpeed=noscript$[NC]
重写规则^%{REQUEST_URI}[QSD,L,R=301]
增加了一个更通用、更容易理解的版本(适用于人类):


选项+FollowSymLinks
重新启动发动机
重写cond%{QUERY_STRING}+
重写规则。*https://%{HTTP_HOST}%{REQUEST_URI}[QSD,L,R=301]

.+是非空的and查询字符串的通用形式。重写规则现在列出了URL的所有部分,但对于真正的版本,我坚持使用^%{REQUEST_URI},因为这两个版本只是将每个URL重写为自身。

它不起作用。。。我的apache版本是2.4.6,所以我认为它应该可以正常工作。另一件事是,它不仅是一个URL,将与这个参数定向,他们是几个,我在问题中添加了一些其他的例子。编辑我的答案。%{QUERY_STRING}的泛化应该足够了。刚刚添加了RewriteRule扩展版本以进行澄清。但是上面做的是一样的…或者无论如何都应该做:d这在我的
.htaccess
文件中非常有效,但是我不能在其中,我需要将它放在
.conf
重定向文件中
/etc/httpd/conf.d
中,而将代码放在
.conf
重定向文件中不起作用
AllowOverride All
是在我的
httpd.conf
文件中设置的,除了问题中描述的设置之外,即使这样,重定向也不起作用……只是为了确保:您的httpd.conf包含Include conf.d/*.conf行,该行在模块包含之后?AllowOverride是专门针对目录的指令。那么,它是否包含在一份报告中?在error.log中是否有任何错误?在error.log中激活重写日志时会发生什么?你能理解为什么不应用规则吗?-->如何激活重写日志记录。LogLevel alert rewrite:trace4 trace4对于几乎最大的信息(查询字符串记录在trace4+)是的,我的
httpd.conf
文件包含
Include conf.d/*.conf
行,它位于
RewriteEngine On
调用之后,位于
配置调用之前。我觉得奇怪的是,我在任何日志中都没有得到任何错误,因此这个问题变得有些难以发现。我已经用VirtualHost在
中尝试了几种配置,但都不起作用。但是,如果我以重定向为例:
redirectmatch301/testhttps://example.com
在我的
httpd.conf
文件中正常工作,或者在我的其他文件中正常工作,在
conf.d
中有重定向。它不工作。。。我的apache版本是2.4.6,所以我认为它应该可以正常工作。另一件事是,它不仅是一个URL,将与这个参数定向,他们是几个,我在问题中添加了一些其他的例子。编辑我的答案。%{QUERY_STRING}的泛化应该足够了。刚刚添加了RewriteRule扩展版本以进行澄清。但是上面做的是一样的…或者无论如何都应该做:d这在我的
.htaccess
文件中非常有效,但是我不能在其中,我需要将它放在
.conf
重定向文件中
/etc/httpd/conf.d
中,而将代码放在
.conf
重定向文件中不起作用
AllowOverride All
是在我的
httpd.conf
文件中设置的,除了问题中描述的设置之外,即使这样,重定向也不起作用……只是为了确保:您的httpd.conf包含Include conf.d/*.conf行,该行在模块包含之后?AllowOverride是一个专门的指令