我有这个 .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
,我希望从 PHP 打印 $_SERVER['REQUEST_URI']
时收到 goodbye
。
也就是说,$_SERVER['REQUEST_URI']
似乎是不可改变的,即使在匹配引用 index.php
的 RewriteRule 之前已经重写了 URL。有什么办法可以修改这个值吗?
我想这样做是为了在不修改 PHP 文件的情况下,为某些现有代码添加薄而简单的 URL 预处理层。所以我试图坚持 .htaccess
。
最佳答案
首先,您犯了一个错误,没有在第一条规则中放置 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"]
这将具有值(value):/goodbye
编辑
如果您在主机上启用了 mod_proxy
,您可以将第一条规则设置为:
RewriteRule ^hello$ /goodbye [P]
然后您将拥有:$_SERVER["REQUEST_URI"]=/goodbye
关于php - Apache 2 mod_rewrite 和 PHP。从 htaccess 修改 $_SERVER ['REQUEST_URI' ] 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618142/