PHP 获取请求的 URL 的目标文件路径 htaccess mod-rewrite


PHP Get target file path for requested URL htaccess mod-rewrite

我用mod-rewrite制作漂亮的网址,比如 http://example.com/users/Dan 等。

我需要获取提供的 URL 的重写规则以查找所请求的服务器端文件的路径;但是,这不会发生在活动页面上,因此我无法使用 $_SERVER['REQUEST_URI']$_SERVER['PHP_SELF']___FILE____

我需要做这样的事情:

$url = '/users/Dan';
$path = $_SERVER['DOCUMENT_ROOT'].'/'.get_filepath_from_htaccess($url);

在这种情况下,如果你去 http://example.com/users/Dan 你实际上是在查看 http://example.com/user.php?name=Dan

因此,在这种情况下,get_filepath_from_htaccess()应该返回/user.php?name=Dan

我想过使用正则表达式运行 .htaccess 文件,但许多重写都是动态的,所以我想它会很混乱,我希望有一个更干净的解决方案。

更新我意识到我原来的问题不够精确,我的意图也不清楚。需要明确的是,这正是脚本的用途。

在我的网站上,用户可以创建自定义 URL 并将其指向现有 URL。例如,我的个人资料将位于 example.com/users/Dan。但是,当我创建自定义 URL (example.com/DansCustomURL) 并将其指向我的配置文件时,它应该从配置文件中获取页面内容,而不会转发到 example.com/users/Dan

所以,事情是这样的。

404 首先重定向到 url.php,这会扫描数据库中与请求的 URL 匹配的自定义 URL。如果未找到,则改为显示 404 页面。

如果找到文件,url.php需要确定目标 URL 的文件路径。

好的,

所以我在这里做一些假设:

  1. 您有一个.htaccess文件,其中包含一些重写,例如您在问题中显示的文件。
  2. 每个重定向可能会将您引导到不同的页面,例如用户.php,管理员.php,xyz.php.。

我认为您正在寻找的信息即/user.php?name=Dan可以通过 _SERVER 美元提取。

所以现在你需要的是get_filepath_from_htaccess功能,这个函数应该在你的所有文件上都可用。

如果你有一个通用文件,如config.php,functions.php,它在所有页面(如用户.php,管理员等中都可用(包含或必需.php。

然后你需要把这个函数放在公共文件中,你的函数可能看起来像

function get_filepath_from_htaccess() {
    return $_SERVER['SCRIPT_FILENAME'] . 
            (isset($_SERVER['REDIRECT_QUERY_STRING']) ? 
                '?' . $_SERVER['REDIRECT_QUERY_STRING'] : '');
}

这将提供从系统根目录的完整路径,因此您不必附加$_SERVER['DOCUMENT_ROOT']

您可能需要根据服务器配置对代码进行一些更改,因此只需转储(print_r或var_dump)$_SERVER并提取出所需的信息并更新上述功能