使用数据库中的值进行Htaccess重定向

时间:2015-10-05 21:05:58

标签: php .htaccess

今天我已经被帮助了一次(Htaccess Regex won't match),我直接遇到了下一个问题,让我想知道我的方法是否可行。

我仍然试图用htaccess来改变这个不那么可爱的网址

http://localhost/test/index.php?page=Article&articleID=61

http://localhost/test/article/2015-09-21-this-is-the-headline

感谢上一个问题,我能够计算出正则表达式并将字符串转发给脚本。

RewriteRule ^article\/(.*)$ article.php?id=$1 [L]

脚本从数据库中获取正确的id。我通过谷歌发现的大多数答案都说使用标题来到达实际位置。然而,这会破坏目的,因为它仍然会改变丑陋的网址。

相反,我尝试了包含该页面。由于index.php需要某些参数,所以我采用了丑陋的方式,只是手动保存了这些参数。

<?php
    require_once('config.php');
    require_once(LIB_PATH.'system/DatabaseController.class.php');    
    $dbController = new DatabaseController();

    $id = $dbController->escapeString($_GET['id']);
    $sql = "SELECT articleID FROM ".DATABASE_PREFIX."_article WHERE articleTitleLink = '".$id."'";
    $result = $dbController->getFirstRow($sql);

    if (empty($result)) {
        header('Location: index.php?page=Error404');
        exit();
    } else {
        $_GET['page'] = 'Article';
        $_GET['articleID'] = $result['articleID'];
        include('index.php');
        exit();
    }

这样做效果出奇的好。它显示正确的页面

index.php?page=Article&articleID=61

同时显示漂亮的网址

article/2015-09-21-this-is-the-headline

然而,既没有加载CSS也没有htaccess处理的图像。我假设因为include实际上并没有执行php。我觉得我要么接近成功,要么完全陷入毫无意义的努力中。

TL; DR:想要美化我的网址。需要从数据中获取id,这是我通过php实现的。现在我丢失了到所请求的页面,同时保持漂亮的URL。我的方法可以运作还是更好的方式?

1 个答案:

答案 0 :(得分:2)

您需要在head部分添加基本标记,以便您可以使用CSS的相对网址。

<base href="http://example.com" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
//The CSS file above will load from http://example.com/css/style.css

OR

您可以在链接标记中的路径前添加正斜杠,以便它从根目录开始。

<link href="/path/to/style.css" rel="stylesheet" type="text/css" />