10

我有这个.htaccess文件:

RewriteEngine On

RewriteRule ^hello$ goodbye

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

所以我收到了所有的请求index.php,但是我hello在请求时收到了hello,我希望在从 PHPgoodbye打印时收到。$_SERVER['REQUEST_URI']

也就是说,$_SERVER['REQUEST_URI']看起来是不可变的,即使在匹配 RewriteRule 引用之前已经重写了 URL index.php。有没有办法修改这个值?

我想这样做是为了在一些现有代码中添加一个薄而简单的 URL 预处理层,而无需修改 PHP 文件。所以我试图坚持在.htaccess.

4

1 回答 1

8

首先,您犯了一个错误,即没有在第一条规则中放置LPT标记。你的代码应该是这样的:

RewriteRule ^hello$ goodbye [PT]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

一旦该代码在那里访问此变量index.php

$_SERVER["REDIRECT_URL"]

这将具有价值:/goodbye

编辑

如果您已mod_proxy在主机上启用,则可以将第一条规则设置为:

RewriteRule ^hello$ /goodbye [P]

然后你将拥有:$_SERVER["REQUEST_URI"]=/goodbye

于 2013-09-04T15:45:59.047 回答