用户友好的URL – mod重写和php重定向

到目前为止我已经这样做了:

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/

但是如果你打算将其作为网址输入,则重写将[username] / gallery /作为一个部分,这意味着$load = [username] / gallery这将给我一个’404′.

可能有一个更好的解决方案来获得理想的结果,但我对.htaccess和重写并不太好.我想补充一点,我也喜欢这个重写,因为我有一个名为signup和signin的子目录,它们都有子目录,但如果我转到URL:

www.mysite.com/signup
www.mysite.com/signin

它忽略了重写并转到目录而不是通过$load语句运行它,这是我想要的.

此外,要注意,在注册帐户时,任何与字符串(如仪表板或大约等)匹配的用户名都不允许他们使用它,这会停止用户名和$load if / else语句及其包含被混淆等

编辑

我忘记注意的另一件事是,因为他们可以随意调用图库,它需要搜索以查看该图库是否存在,例如:

www.mysite.com/username/my+first+album

它首先需要检查用户名是否存在,然后检查相册是否存在,然后显示它是否存在,否则404 /重定向到任何地方(如果不存在).所以基本上,两个参数/查询都是动态的.不仅如此,那么该专辑​​中的单张照片需要同样的工作,例如:

www.mysite.com/username/my+first+album/my+picture

我希望这是有道理的…

最佳答案
一个简单的解决方案是:
编辑HTACCESS

RewriteBase /
RewriteCond %{REQUEST_URI}  !/signup
RewriteCond %{REQUEST_URI}  !/signin
RewriteRule ^([^/]*)/([^/]*)$index.php?load=gallery&username=$1&gallery=$2
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)$index.php?load=$1 [QSA,L]

现在那个PHP部分(对于index.php):

$load = $_GET['load'];
switch ($load){
    default:
        include('home.php');
        exit();
    break;
    case 'dashboard':
        include('dashboard.php');
        exit();
    break;
    case 'about':
        include('about.php');
        exit();
    break;
    case 'gallery':
        $username = $_GET['username'];
        $gallery = $_GET['gallery'];

        //check for the username and gallery

        header("Location: your-gallery-location-goes-here");
    break;
}

希望它会有所帮助:)

转载注明原文:用户友好的URL – mod重写和php重定向 - 代码日志