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 的页面 slug
.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?
我的 .htaccess 中的 RewriteRule 命令不起作用