我决定使用干净的网址构建一个Web应用程序。然而,起初它似乎很难。我在测试过程中遇到了很多问题,我无法弄清楚如何建议基本构建Clean URL。
我最终决定将所有内容重定向到index.php
并从那里处理URI。
这是我的.htaccess文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?url=$0 [QSA]
在PHP端我创建了这个,所以只传递数组中的URL:
$root_path = '/';
$uri = $_SERVER['REQUEST_URI'];
$url = array(
$root_path . 'login' => 'login'
);
$url_basic = array_keys($url);
$url_slash = array_keys($url);
array_walk($url_slash, function(&$value, $key) { $value .= '/'; return $value;});
if (in_array($uri, $url_basic) || in_array($uri, $url_slash)) {
$uri = rtrim($uri,'/');
require $url[$uri] . '.php';
exit();
} else {
echo 'Bad';
}
所以基本上如果有人输入:/ login或/ login /他们将需要login.php,否则他们将留在index.php页面上(因为APACHE重定向其他所有内容)。
假设用户在尝试登录时收到了错误。在这种情况下,我想最好的方式(或者如果不是最好的方法,请告诉我)传递一个名为'的$ _GET变量错误'例如。因此,用户将获得:/login/?error=1
如何才能实现这一结果?因为如果我键入,我会被重定向到index.php页面。谁能帮帮我吗?
答案 0 :(得分:0)
您可以在$ _SERVER ['REQUEST_URI']中剪切查询字符串时查看$ _SERVER ['QUERY_STRING']:
if ($_SERVER['QUERY_STRING'])
echo substr($_SERVER['REQUEST_URI'], 0, -strlen($_SERVER['QUERY_STRING']) - 1);
-1也可以删除问号。
但是没有必要在GET中设置错误。您可以使用Flash消息并将错误存储在会话中。您可以找到一种使用它们的简单方法here。
答案 1 :(得分:0)
也许您应该考虑使用
的路由系统Symfony:http://symfony.com/doc/current/book/routing.html 或者它的苗条对手