2014-01-26 13 views
1

以下工作是规则:htaccess的重写查询字符串在Apache 2.2的消失,但在2.4

RewriteRule ^api/([\w-]+)/?$ api.php?method=$1 [QSA] 

在本地的Apache 2.4服务器,它可以让我重写,如:

/api/create-account/?name=abcd 

/api.php?method=create-account&name=abcd 

在生产服务器上,这是Apache 2.2,请求去api.php。但我发现我的脚本中没有查询字符串参数。如果我转储$_REQUEST$_GET$_POST,我只能得到空数组。

我错过了什么?

回答

2

您需要关闭在Multiviews:

Options -Multiviews 

在Multiviews是mod_negotiation模块选项,告诉它尝试匹配到物理文件的请求。当它看到像/api/somtehin这样的请求,然后看到有一个名为api.php的文件时,它将立即映射到该文件,完全绕过mod_rewrite。

+0

我必须将它添加到.htaccess中吗? – Salman

+0

@Salman您可以将其添加到htaccess文件或您的虚拟主机配置 –

+0

检查'$ _SERVER'转储,似乎默认情况下实际启用Multiviews。我看到'[PHP_SELF] =>/api.php/create-account /'。但那不是我想要的,因为我写了不同的脚本。 – Salman