PHP:搜索文件和返回文件路径的目录树

时间:2013-01-06 04:53:03

标签: php search directory-traversal

考虑这个工作流程:

用户向website.com/lolmyblogpost

发出请求

我的.htacces就像......

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

在index.php中我将在lolmyblogpost.html返回的模板文件树中搜索:

/path/to/lolmyblogpost.html

所以在我的主模板中我可以:

{include file="{$pathToTemplate}"}

如何在目录树中搜索文件并返回文件路径?

1 个答案:

答案 0 :(得分:1)

您真正想要的是使用默认类型“回顾”支持。像这样设置你的Apache虚拟主机(

<VirtualHost *:80>
    ServerName  example.com:80
    ServerAlias www.example.com
    DocumentRoot    "/path/to/root/dir"
    AddDefaultCharset UTF-8
    ErrorDocument 403 "/403.php"
    ErrorDocument 404 "/404.php"
    <Directory /path/to/root/dir>
            Options Indexes FollowSymLinks
            DefaultType application/x-httpd-php
            AllowOverride All
            Order deny,allow
            Allow from all
            AddOutputFilterByType DEFLATE application/javascript text/css text/html text/plain text/xml
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !.index.ph.*
            RewriteRule ^(.*)$  /index.php
    </Directory>
</VirtualHost>

重要的一行是DefaultType application/x-httpd-php,这意味着您现在可以摆脱.php文件扩展名。

您现在可以使用http://example.com/this_is_a_php_page之类的网址,也可以使用http://example.com/this_is_a_php_page/with_a_path_info_var

因此,在this_is_a_php_page(实际上是没有扩展名的.php文件)上,您可以使用$_SERVER['PATH_INFO']来检查URI中传递的内容。

修改 添加了RewriteEngine和规则,将所有内容推送到index.php。这意味着您现在在服务器上有一个名为index.php的(真实)单页,需要检查$_SERVER['REDIRECT_URL'] var以了解真正的请求。

例如,http://example.com/a_page的请求现在会加载index.php并将a_page传递给$_SERVER['REDIRECT_URL']。注意:此解决方案将所有内容推送到index.php。您需要包含一个例外:

 RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*

允许所有以not_me_plz文件开头的文件“按预期”投放。