使用Mod_rewrite和$ _GET变量的奇怪问题

时间:2015-03-23 20:13:20

标签: php apache .htaccess mod-rewrite

在阅读了大量的SO问题,询问朋友等等之后,我来到这里时遇到了一个关于Apache mod_rewrite的奇怪问题。

我试图通过RewriteRule抓住http://api.server.com/.../results.php?id=X网址。

很简单,你会说,我知道,我的.htaccess文件内容是:

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^results/(.*)$ results.php?id=$1
出于调试原因,

results.php非常简单,看起来像是

    var_dump($_GET);

但是这个脚本总是返回array 0 { }

我是否应该指定我已经尝试清除这些标记,并在没有效果的情况下更改其他人的(.*)类。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要在此处停用MultiViews选项:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteRule ^results/(.*)$ results.php?id=$1 [L,QSA,NC]

MultiViews使用选项Apache's content negotiation modulemod_rewrite之前运行,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php

答案 1 :(得分:0)

您的重写规则与您使用的网址(http://api.server.com/customer/2/results.php)不匹配。

根据您的规则和设置,正确的URL是:

http://api.server.com/customer/2/results/123

但是,您提到已将所有内容放在/ 2 /文件夹中。如果2是您要获取的ID,则它无法工作 - URL重写仅适用于不存在的路径。

相反,您应将.htacess和results.php文件放在客户文件夹中,并使用以下网址:

http://api.server.com/customer/results/2

或者将您的规则和网址更改为:

RewriteRule ^([0-9]+)/results$ results.php?id=$1
http://api.server.com/customer/2/results