htaccess究竟是如何与我的php脚本交互的?

时间:2013-06-22 20:15:23

标签: php .htaccess mod-rewrite

我有一个.htaccess脚本:

RewriteBase /
RewriteCond %{HTTP_HOST} ^([A-Z0-9-]+)\.stage-proxy\.com$ [NC]
RewriteRule ^(.*)$ /index.php/%1.com/$1 [L]

所以当我浏览

http://google.stage-proxy.com/analytics

根据http://htaccess.madewithlove.be,入站网址应为

http://google.stage-proxy.com/index.php/google.com/analytics

但每当我尝试在php中浏览我的$ _SERVER变量时,它仍然会出现

http://google.stage-proxy.com/analytics

我知道启用了htaccess(我知道安装了mod_rewrite模块,并且启用了allowOverride All)。这是怎么回事?我的.htaccess知识中是否有一些明显的漏洞?

供参考,我使用的是ubuntu服务器13.04。不确定这是否会改变任何东西。

1 个答案:

答案 0 :(得分:0)

不确定为什么你的规则没有循环,它应该导致500内部错误,而不会像RewriteCond %{REQUEST_FILENAME} !-f那样阻止循环。

无论如何,$_SERVER['PHP_SELF']应该来自 index.php /index.php/google.com/analytics,或者您可以查看$_SERVER['PATH_INFO]

$_SERVER documentation says

  

PHP_SELF :当前正在执行的脚本的文件名,相对于文档根目录。例如,地址http://example.com/test.php/foo.bar的脚本中的$ _SERVER ['PHP_SELF']将为/test.php/foo.bar FILE 常量包含当前(即包含)文件的完整路径和文件名。如果PHP作为命令行处理器运行,则此变量包含自PHP 4.3.0以来的脚本名称。以前它不可用。

  

PATH_INFO :包含任何客户端提供的路径名信息,该信息位于实际脚本文件名之后但在查询字符串之前(如果可用)。例如,如果通过网址http://www.example.com/php/path_info.php/some/stuff?foo=bar访问了当前脚本,则$_SERVER['PATH_INFO']将包含/some/stuff