Apache 在mod_rewrite中是否有一个变量可以与%{DOCUMENT_ROOT}%{REQUEST_FILENAME}等效?
我在httpd.conf文件中使用mod_rewrite(不是在.htaccess文件中),我想知道是否有一个变量可以代表整个请求;ieApache 在mod_rewrite中是否有一个变量可以与%{DOCUMENT_ROOT}%{REQUEST_FILENAME}等效?,apache,mod-rewrite,Apache,Mod Rewrite,我在httpd.conf文件中使用mod_rewrite(不是在.htaccess文件中),我想知道是否有一个变量可以代表整个请求;ieDOCUMENT\u ROOT表示“路径/to/htdocs”,而REQUEST\u FILENAME表示“/path/to/file.php”。是否有一个单独的Apache变量同时表示这两个变量,如“path/to/htdocs/path/to/file.php” 我问的原因是,在我的重写指令中,这不起作用: RewriteCond %{REQUEST_FIL
DOCUMENT\u ROOT
表示“路径/to/htdocs”,而REQUEST\u FILENAME
表示“/path/to/file.php”。是否有一个单独的Apache变量同时表示这两个变量,如“path/to/htdocs/path/to/file.php”
我问的原因是,在我的重写指令中,这不起作用:
RewriteCond %{REQUEST_FILENAME} -f
但这确实:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
奇怪的是,我看过的所有教程都使用第一种格式,但这对我来说不起作用,我自己想出了第二种格式——我从未见过第二种格式在任何教程中使用。这与我用httpd.conf而不是.htaccess文档编写的事实有关吗
当我输出%{REQUEST\u FILENAME}变量时,它不包括文档根。
%{document\u root}
不是website.com,它是文件系统上与站点指令关联的本地路径。例如:/var/www/localhost/htdocs
如果想要website.com,则需要%{SERVER\u NAME}
(由指令定义)或%{HTTP\u HOST}
,后者由主机:请求头定义
另外,%{REQUEST\u FILENAME}
包含文档根目录,它或多或少等同于:%{document\u root}%{REQUEST\u URI}
。因此,给定上面的文档根示例,请求URI为/images/title.png
,那么%{request\u FILENAME}
将是/var/www/localhost/htdocs/images/title.png
如果您要查找的是:website.com/path/to/file.php,那么,没有。没有一个变量可以为您组合这些内容。您想要:
%{HTTP_HOST}%{REQUEST_URI}
或
这与我用httpd.conf而不是.htaccess文档编写的事实有关吗
对。从:
请求\u文件名
与请求匹配的文件或脚本的完整本地文件系统路径,如果服务器在引用
request\u FILENAME
时已经确定了该路径。否则,如在虚拟主机上下文中使用时,与请求URI
相同的值
而REQUEST\u URI
是“请求的URI的路径组件,例如/index.html
”
奇怪的是,我看过的所有教程都使用第一种格式
因为大多数教程都是针对.htaccess(或
)上下文编写的
如果在每服务器上下文中使用(即,在请求映射到文件系统之前)SCRIPT\u FILENAME
和request\u FILENAME
不能包含完整的本地文件系统路径,因为在此处理阶段路径未知。在这种情况下,两个变量最初都包含REQUEST\u URI
的值为了在每个服务器上下文中获取请求的完整本地文件系统路径,请使用基于URL的前瞻%{LA-U:request_FILENAME}
来确定请求文件名的最终值
啊,很抱歉关于文档根的混淆。问题是,在我的mod_rewrite指令中,当我使用RewriteCond时,我必须检查文件是否存在,当我只使用%{REQUEST_file}时它不起作用,但当我使用%{DOCUMENT_ROOT}%{REQUEST_file}时它起作用。为什么会这样?当我输出%{REQUEST_FILENAME}变量时,它不包括文档根。
%{SERVERNAME}%{REQUEST_URI}