【发布时间】:2016-02-21 05:33:59
【问题描述】:
我使用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 的文件路径。
【问题讨论】:
-
你为什么不使用像 AltoRouter 或任何 PHP 路由器包这样的东西?只是问
标签: php regex .htaccess mod-rewrite