SEO友好的URL - 从blog.php?articleId = 26到blog / $ articleTitle

时间:2013-11-23 13:17:17

标签: php .htaccess url seo

最后让我的代码向我的数据库发布一个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" ); 
} 

2 个答案:

答案 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 => ''
)

希望这很有用。