0

我有一个 .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,入站 URL 应该是

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。不确定这是否真的会改变任何事情。

4

1 回答 1

0

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

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

$_SERVER 文档

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

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

于 2013-06-22T22:36:29.290 回答