【发布时间】:2012-02-24 17:31:42
【问题描述】:
到目前为止,我已经这样做了:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?load=$1 [QSA,L]
然后在我的索引页面(在根目录中)我使用 PHP 来确定要加载哪个页面:
// Swap to variables
$load = $_GET['load'];
// Home page
if (!$load || $load == "") { include('home.php'); exit(); }
// Dashboard
if ($load == "dashboard") { include('dashboard.php'); exit(); }
// About
if ($load == "about") { include('about.php'); exit(); }
// Username
$data_array = array(':username' => $load);
$select_account = $connect->prepare("SELECT * FROM `users` WHERE `username` = :username");
$select_account-> execute($data_array);
$account_amount = $select_account->rowCount();
if ($account_amount > 0) { include('profile.php?name=$load'); exit(); }
// Redirect to 404 if there are no results
include('404.php'); exit();
到目前为止一切正常,但用户可以将照片上传到画廊,我希望它们被这样查看:
www.mysite.com/[username]/gallery/
但是,如果您将其输入为 url,则重写会将 [username]/gallery/ 作为一个部分,这意味着 $load = [username]/gallery 会给我一个“404”。
可能有更好的解决方案来获得所需的结果,但我不太擅长 .htaccess 和重写。我想补充一点,我也喜欢这种重写,因为我有名为 signup 和 signin 的子目录,它们也都有子目录,但是如果我转到 URL:
www.mysite.com/signup
www.mysite.com/signin
它忽略重写并转到目录,而不是通过我想要的 $load 语句运行它。
另外,需要注意的是,在注册帐户时,任何与 dashboard 或 about 等字符串匹配的用户名都不允许他们使用它,这会停止用户名和 $load if/else 语句他们包括被混淆等
编辑
我忘记注意的另一件事是,由于他们可以随意调用画廊,因此需要进行搜索以查看该画廊是否存在,例如:
www.mysite.com/username/my+first+album
首先需要检查用户名是否存在,然后检查相册是否存在,如果存在则显示它,如果不存在则 404/重定向到任何地方。所以基本上,两个参数/查询都是动态的。不仅如此,该相册中的单张照片也需要同样工作,例如:
www.mysite.com/username/my+first+album/my+picture
我希望这是有道理的......
【问题讨论】:
标签: php mod-rewrite url-rewriting friendly-url