SEO友好URL

3

我喜欢stackoverflow提供问题链接的方式,就像这个问题的链接https://dev59.com/eVfUa4cB1Zd3GeqPFjEK,其中问题标题是seo-friendly-url

我正在创建一个博客,希望以与SO相同的方式提供链接,如何在PHP中实现?
欢迎任何建议 :)

表结构

  • ID
  • Title
  • Tags
  • Category
  • UID

添加时间
我使用的是PHP/APACHE而没有框架!我不想使用任何博客系统,想要自己创建


2
如果您使用Apache作为Web服务器,那么mod_rewrite就是您的好朋友。 - zerkms
2
那个关闭投票建议迁移到webmasters.se,但这不合适,因为这是一个编码问题,而不是一般的SEO问题。 - ThiefMaster
1
为什么不直接使用可以做到这一点的WordPress呢? - ceejayoz
1
@ceejayoz 我想让它保持简单和快速!我也是为了学习而这样做。 - Sourav
1
请查看以下内容,http://stackoverflow.com/questions/1481575/how-to-rewrite-a-url-with-php - tradyblix
显示剩余6条评论
3个回答

4
我不确定为什么人们在这里故意变得愚钝...

您需要的是 mod_rewrite,这是一个用于URL重写的Apache模块。

在您的 .htaccess 文件中(您可能需要创建它),请添加以下内容:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteRule ^blog\/([0-9]+)\/.*$ /blog.php?post=$1 [L]
</IfModule>

这意味着当您访问/blog/10/任何文本/时,背后的情况与访问/blog.php?post=10相同。 括号中的([0-9]+)被称为正则表达式(或regex),匹配任何数字。 .*表示匹配任何内容。 ^锚定到查询的开头,$锚定到结尾。 斜杠(/)被转义为\/

2
我会试一下,并感谢你的帮助 +1 :) - Sourav
你的 RewriteRule 可以处理 blog.php?post=15,但是当我查看 blog.php 时,它会重定向到根目录!如何停止这个行为? - Sourav
前往blog.php不应受此影响。您确定没有其他重写规则吗?如果您也想让blog/转到blog.php,可以添加RewriteRule ^blog/$ /blog.php [L]。 - Rich Bradshaw
浏览/blog/10/any-old-bit-of-text/也不起作用:(我将.htaceess和blog.php文件放在根目录的子目录下) - Sourav
它不能在子目录中,否则在请求之前不会被解析。 - Rich Bradshaw

0

首先,您没有写明使用哪个框架。我将在Symfony框架上描述您想要做的事情。

第一种解决方案

http://www.symfony-project.org/jobeet/1_4/Doctrine/en/05#chapter_05_route_customizations

  1. 更改路由,以使路由引擎能够理解“美化的URL”
  2. 更改控制器的操作,负责搜索与您文章相关的正确记录

您可以通过声明sluging函数并在路由中直接使用它来增强解决方案

第二种解决方案

使用任何已经支持它的博客解决方案 - 如ceejayoz所写


0

你可以同时使用PHP和Apache。具体来说,是使用Apache的Forcetype功能。这篇文章解释了如何使用Forcetype

假设你有一个像这样的URL:http://www.example.com/article/seo-friendly-example

.htaccess文件应该是这样的:

<Files article>
  ForceType application/x-httpd-php 
</Files>

PHP代码大概长这样:

<?php
    list(,$slug) = explode("/", $_SERVER['REQUEST_URI']);
?>

$slug的值将是seo-friendly-example。这将是您数据库中该文章的一个关键。


我刚刚尝试了一下,对我来说可以工作。可能是一个临时问题。 - John Conde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接