假设我们有以下PHP页面“index.php”:
<?
if (!isset($_GET['req'])) $_GET['req'] = "null";
echo $_SERVER['REQUEST_URI'] . "<br>" . $_GET['req'];
?>
以及以下“.htaccess”文件:
RewriteRule ^2.php$ index.php?req=%{REQUEST_URI}
RewriteRule ^1.php$ 2.php
现在,让我们访问“index.php”。我们得到了这个:
/index.php
null
那很酷。让我们访问“2.php”。我们得到了这个:
/2.php
/2.php
那也很酷。但现在让我们来看看“1.php”:
/1.php
/2.php
所以...我们要求“1.php”,它默默地重定向到“2.php”,它默默地重定向到“index.php?req =%{REQUEST_URI}”,但这里是“%{REQUEST_URI} “似乎是”2.php“(我们正在寻找第一次重定向后的页面)和$ _SERVER ['REQUEST_URI']是”1.php“(原始请求)。
这些变量不应该相等吗?今天这给我带来了很多麻烦,因为我试图仅根据原始请求进行重定向。我可以在“.htaccess”中使用哪个变量,即使重定向后也会告诉我原始请求吗?
提前致谢,我希望我已经说清楚了。这是我的第一篇帖子:)
答案 0 :(得分:4)
我不确定它是否能满足您的需求,但请先尝试REDIRECT_REQUEST_URI
,然后再查看REQUEST_URI
。REDIRECT_*
。你在评论中提到了Gumbo的答案,你真正想要的是原始的URI; {{1}}版本的服务器变量是Apache尝试使这类东西可用的方式。
答案 1 :(得分:2)
只需更改规则的顺序即可:
RewriteRule ^1\.php$ 2.php
RewriteRule ^2\.php$ index.php?req=%{REQUEST_URI}
或只使用一条规则:
RewriteRule ^(1|2)\.php$ index.php?req=%{REQUEST_URI}
答案 2 :(得分:1)
嗯,我想我解决了这个问题。我使用%{THE_REQUEST}变量,它基本上包含这样的东西:“GET /123.php HTTP / 1.1”。即使重定向后它仍然保持不变。谢谢大家的帮助! :)