我用.htaccess重写了一个URL,使它看起来更漂亮。 但是当我向这个URL添加一个查询字符串时,这些键在PHP中是不可见的。
在我的.htaccess文件中,我尝试了几个方法来解决问题,但没有任何效果。
RewriteEngine On
[some code]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ ?site=$1
我尝试过这种重写,看它是否有效:
RewriteRule ^search?q=g ?site=search&q=g
但如果我在PHP中使用print_r($_GET)
,我将获得Array ( [site] => search )
试试http://kwtsports.bplaced.de/search?q=g。
我有一个重定向到/search?q=blablaSearchQuery
的搜索字段,但正如我所说,$_GET['q']
是空的。
这也不起作用:
RewriteRule ^search?q=([a-zA-Z0-9_-]+)/?$ ?site=search&q=$1
有谁知道为什么会这样?
答案 0 :(得分:3)
将[QSA]
添加到RewriteRule
的末尾。这会将旧查询字符串附加到结果中。
有关详细信息,请参阅docs。
答案 1 :(得分:1)
有谁知道,为什么会这样?
是。您无法在重写规则中测试查询字符串,因此规则的这一部分将无法运行:RewriteRule ^search?q=g
。
如果要测试查询字符串,则必须在重写cond中对其进行测试。
例如,对于您的RewriteRule ^search?q=g?site=search&q=g
示例,您必须执行以下操作:
RewriteCond %{QUERY_STRING} ^q=([^&]+)
RewriteRule ^search/?$ site=search&q=%1 [L]
在这种特殊情况下,由于您不想更改q
值,因此我们不需要对其进行测试,您可以在添加后使用QSA
选项简单地通过它site=search
:
RewriteRule ^search/?$ site=search [L,QSA]