【问题标题】:RewriteCond %{QUERY_STRING}重写条件 %{QUERY_STRING}
【发布时间】:2017-05-27 20:40:10
【问题描述】:

这是我想要完成的:

http://example.com/real-estate/?group=rentals 需要去 http://example.com/real-estate/rentals

这是我的 .htaccess 中不起作用的内容:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/real-estate/ [NC]
RewriteCond %{QUERY_STRING} ^group=rentals
RewriteRule (.*) http://example.com/real-estate/rentals/? [NC,R=301,L]
</IfModule>

【问题讨论】:

  • 这很不寻常...通常人们希望重定向相反。所以你传入的http请求真的是http://example.com/real-estate/?group=rentals,可见的URL应该改为http://example.com/real-estate/rentals真的吗?
  • 没错。
  • RewriteCond 进行部分匹配,您是否尝试过不使用^?另外,为什么要在 RewriteRule 中放置另一个 ?

标签: apache .htaccess http mod-rewrite web


【解决方案1】:

只需在您的 .htaccess 文件中使用它:

RewriteEngine On
RewriteRule ^real-estate/([^/]*)$ /real-estate/?group=$1 [L]

它会给你留下 URL:http://example.com/real-estate/rentals。确保在测试之前清除缓存。

【讨论】:

  • 我确保清除了缓存,但 URL 仍然显示为 example.com/real-estate/?group=rentals 您能想到会出现这种情况的任何原因吗?
  • 您的.htaccess 文件中还有什么?由于上述内容应该可以正常工作。
【解决方案2】:

这很不寻常...通常人们希望以另一种方式重定向...

您的代码看起来几乎没有问题,只有一些小的更正。但这些可能是您所缺少的:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} ^/real-estate/?$ [NC]
  RewriteCond %{QUERY_STRING} ^group=rentals$
  RewriteRule ^ http://example.com/real-estate/rentals [R=301,L]
</IfModule>

为此,规则必须直接放在 http hosts 配置中,或者放在 hosts 文档根目录中的 .htaccess 样式文件中,并启用对此类文件的解释。

还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用 .htaccess 样式文件。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

【讨论】:

  • @chrislovessushi“没用”没有帮助,您必须在该声明中添加更多详细信息。发生什么了?你看到了什么?您的 http 服务器错误日志文件中的条目是什么? .htaccess样式文件的解释真的配置了吗?
  • 我将上面的代码(当然是更改了 example.com)添加到了我网站根目录下的 .htaccess 文件中。当我访问 example.com/real-estate/?group=rentals 时,它会正常加载页面。我需要将 URL 更改为 example.com/real-estate/rentals
  • 那么要么你从之前缓存的版本中加载了页面并且需要清除浏览器缓存一次(或进行深度重新加载),要么.htaccess样式文件的解释是not 在我们的 http 主机中启用。尝试在文件中放置明确的语法错误并监视您的 http 服务器错误日志文件。会发生什么?
  • 是的,我在htaccess中添加了一行垃圾,收到500错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多