在阅读了大量的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 { }
我是否应该指定我已经尝试清除这些标记,并在没有效果的情况下更改其他人的(.*)
类。
感谢您的帮助。
答案 0 :(得分:1)
您需要在此处停用MultiViews
选项:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteRule ^results/(.*)$ results.php?id=$1 [L,QSA,NC]
MultiViews
使用选项Apache's content negotiation module
在 mod_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