我有一个.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。不确定这是否会改变任何东西。
答案 0 :(得分:0)
不确定为什么你的规则没有循环,它应该导致500内部错误,而不会像RewriteCond %{REQUEST_FILENAME} !-f
那样阻止循环。
无论如何,$_SERVER['PHP_SELF']
应该来自 index.php /index.php/google.com/analytics
,或者您可以查看$_SERVER['PATH_INFO]
。
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
。