我有这个.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
,我希望在打印时收到goodbye
{来自PHP的{1}}。
也就是说,$_SERVER['REQUEST_URI']
似乎是不可变的,即使在匹配引用$_SERVER['REQUEST_URI']
的RewriteRule之前已经重写了URL。有没有办法修改这个值?
我想这样做是为了在不修改PHP文件的情况下为一些现有代码添加一个简单而简单的URL预处理层。所以我试图坚持index.php
。
答案 0 :(得分:6)
首先,您错误地将L
或PT
标记放在第一条规则中。你的代码应该是这样的:
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