今天我已经被帮助了一次(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。我的方法可以运作还是更好的方式?
答案 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" />