最后让我的代码向我的数据库发布一个URL友好的标题(以后用作SEO优化的URL)我现在正在研究如何让我的博客脚本接受所述的URL。
理想情况下,我希望我的URL以类似的方式出现堆栈溢出。
目前我的网址是这样的:
blog.php?action=viewArticle&articleId=26
我希望它看起来像这样:
/blog/responsive-layout-design/
我已经整理了脚本的一面 - 创建新URL的一面,并将其保存在数据库中,但我很难弄清楚如何在前端实现它。
我看过几个指南和示例,但它们只显示了如何创建URL,如:
store.php?action=viewItem&itemID=34 to store/item/34
显然,我可以使用我的网址相当容易地做到这一点,但它仍然只是显示文章ID,而不是文章标题。
这是我目前通过ID从数据库中提取文章的代码 - 如何修改它以获得我正在寻找的功能?
function viewArticle() {
if ( !isset($_GET["articleId"]) || !$_GET["articleId"] ) { homepage(); return; }
$results = array();
$results['article'] = Article::getById( (int)$_GET["articleId"] );
$results['pageTitle'] = $results['article']->title . " | Blog";
require( TEMPLATE_PATH . "/viewArticle.php" );
}
答案 0 :(得分:1)
我一直这样做的方法是在数据库中设置URL slug。
所以你会存储类似的东西:
tblBlog
blogID | blogTitle | blogContent | blogURLSlug
然后,您可以使用.htaccess
设置漂亮的网址RewriteRule ^/(blog)/(.*)/$ /blog.php?slug=$2
当选择页面内容时,请选择使用URLSlug
$stmt = $dbh->prepare("SELECT `blogTitle`, `blogContent` FROM `tblBlog` WHERE `blogURLSlug` = :slug");
$stmt->bindParam(':slug', $_GET['slug']);
$stmt->execute();
$blogData = $stmt->fetch();
这样,您可以访问/blog/RWD-is-cool/
,它会从DB中选择URLSlug = RWD-is-cool
答案 1 :(得分:1)
您不需要数据库来执行此操作。所有的PHP框架(我都知道)支持这种类型的URL和用于识别什么是所谓的路由的方法。基本上,网址的结构是以下www.website.com/controller(page)/method/getparameters
。您用来访问它的是单个入口点。换句话说,您只在根目录中有一个index.php
文件,并将所有调用重定向到它,然后将URL分解为其给定的组件,并决定从那里开始做什么。 apache的一个简单示例:
的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [L,NS]
的index.php
$page = str_replace('index.php','', $_SERVER['PHP_SELF']);
$page = str_replace($page,'',$_SERVER['REQUEST_URI']);
$page = explode('/',$page );
$controller = array_shift($page );
$parameters = array();
foreach ($page as $val){
$parameters[] = urldecode($val);
}
然后在网址www.website.com/blog/responsive-layout-design/
中,您将拥有
$controller => 'blog'
$parameters => array(
0 => 'responsive-layout-design',
1 => ''
)
希望这很有用。