我正在设置重定向URL,将REQUEST_URI
从.htaccess
传递到PHP文件。
这是我的文件结构:
index.php
.htaccess
folder/index.php
如果网址为http://example.com/?something
我想将%{REQUEST_URI}
的完整URL从.htaccess
传递到folder/index.php
,并用$_SERVER['REQUEST_URI']
进行检索。
我的folder/index.php
:
echo $_SERVER['REQUEST_URI'];
.htaccess
:
已更新:
Options +FollowSymLinks -MultiViews
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !/folder/index.php$
RewriteRule .* /folder/index.php [L,NE]
</IfModule>
我希望在PHP文件中回显REQUEST_URI
,但始终将其提供给外部服务器。
答案 0 :(得分:1)
我想将
%{REQUEST_URI}
的完整URL从.htaccess
传递到folder/index.php
,并用$_SERVER['REQUEST_URI']
进行检索。
您实际上不能执行此操作(但是我不认为这是您正在尝试-甚至甚至想执行的操作)。为了澄清...
PHP超级全局$_SERVER['REQUEST_URI']
由PHP填充,并且不能被覆盖。
尽管%{REQUEST_URI}
(Apache 服务器变量)和$_SERVER['REQUEST_URI']
(PHP超全局变量)相似,但它们引用了不同的值:>
%{REQUEST_URI}
(Apache服务器变量)-仅引用URL路径(无查询字符串)。该值是%解码的。如果请求被重写,则将其更新为包含重写的URL,而不是初始请求的URL。
$_SERVER['REQUEST_URI']
(PHP超全局性)-保存用户请求的初始URL路径和查询字符串(而不是重写的URL)。该值未%解码。
如果您确实确实想在PHP中引用Apache服务器变量REQUEST_URI
,则需要显式传递它(也许作为环境变量或查询字符串)-但是取决于何时您“传递”,最终可能传递不同的值。无论哪种方式,都不会更改$_SERVER['REQUEST_URI']
的值,如上所述,该值由PHP控制。
例如:
RewriteRule ^ - [E=APACHE_REQUEST_URI:%{REQUEST_URI}]
并在PHP中将其引用为getenv('APACHE_REQUEST_URI')
。
更新:
听起来,您可能想要类似以下的内容:
RewriteCond %{QUERY_STRING} .
RewriteRule ^(index\.php)?$ folder/index.php [L,NE]
此内部重写到文档根目录的任何请求,其中包含查询字符串(在?
之后的所有内容)到/folder/index.php
。如果不存在查询字符串,则照常使用文档根目录中的index.php
。
然后,在/folder/index.php
中,您只需访问$_SERVER['QUERY_STRING']
即可访问查询字符串(重定向到的字符串)。
答案 1 :(得分:0)
使用环境变量。
.htaccess
SetEnv RURI %{REQUEST_URI}
index.php
<?php $requestURI = getenv('RURI'); ?>
Set an environment variable in .htaccess and retrieve it in PHP
确保在Apache中启用了mod_env
。