HTACCESS RewriteRule - 不从漂亮的 URL 发送查询字符串

Posted

技术标签:

【中文标题】HTACCESS RewriteRule - 不从漂亮的 URL 发送查询字符串【英文标题】:HTACCESS RewriteRule - Not sending query string from Pretty URL 【发布时间】:2013-06-14 01:30:21 【问题描述】:

我在使用 RewriteRule 时遇到问题。我为我的搜索页面创建了一个漂亮的 URL,它会在其中发布到自身以查询结果。但是 $_GET['type'] 变量没有被发送到页面。这在我的本地 WAMP 服务器上运行良好,但在我的 Live 托管服务器上没有返回结果。

例如http://..com/search/searchType/ SearchType 是我发送到页面的$_GET['type'] 数据。

我的.HTACCESS如下

RewriteEngine On
RewriteRule ^property/(.*)/(.*)/([0-9]+)/$ view_property.php?type=$1&id=$3 [L]
RewriteRule ^search/(.*)/ search.php?type=$1 [L]

【问题讨论】:

您的生产服务器的 Apache 配置是否允许通过 htacess 覆盖? RewriteRule 可以创建漂亮的 url,如果这就是你所指的。否则我不确定(我可以问)。 httpd.conf 中是否有可能禁用此类功能的特定设置?因为我可以在本地服务器上禁用它来测试它。 重写规则不会创建漂亮的 URL,它们只是将漂亮的 URL 重定向到适当的脚本。因此,如果您有一个指向漂亮 URL 的 GET,但漂亮 URL 没有被正确重定向,那么您将无法正确传递数据。当您说这在测试环境中有效但在生产环境中无效时,我的第一个倾向是查看 Web 服务器配置。 【参考方案1】:

问题是因为文件名search.php 有冲突,破坏了以文本“搜索”开头的RewriteRule

在发现这一点并进行更多研究后,我发现包括 Options -MultiViews 会禁用 mod_negotiation MultiViews

这必须在我的 Live 托管服务器上启用并在我的本地主机上禁用。我会尽快找出并更新。

另一个解决方法是将RewriteRule URL 重命名为^search/ 以外的名称或当前作为另一个文件存在的任何其他名称,以消除此冲突。

【讨论】:

以上是关于HTACCESS RewriteRule - 不从漂亮的 URL 发送查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

。htaccess对RewriteRule的帮助

在 htaccess 中使用 rewriterule 的页面 slug

.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?

我的 .htaccess 中的 RewriteRule 命令不起作用

.htaccess - ErrorDocument 与 RewriteRule

.htaccess 重定向到 404 页面 RewriteRule