基于类别名称的SEO URL,URL中没有类别ID

Unk*_*ror 1 php seo url-rewriting

我有两个表posts:categories

post_id | post_title  | post_content   | post_cat
--------------------------------------------------
1         Hello World  welcome to my..   1
.         ..           ..                ..
Run Code Online (Sandbox Code Playgroud)

categories

cat_id | cat_name | cat_parent
-----------------------------
1        News       NULL
2        Sports     1
.        ...        .. 
Run Code Online (Sandbox Code Playgroud)

让我们说新闻的当前类别链接是 http://domain.com/category/1/

MySQL的声明

SELECT posts.post_id,
       posts.post_id,
       posts.post_title,
       posts.post_content,
       posts.post_cat,
       categories.cat_id,
       categories.cat_name,
       categories.cat_parent
FROM   posts
       INNER JOIN categories
         ON posts.post_cat = categories.cat_id  
       WHERE posts.post_cat = (int)$_GET['cat_id']
Run Code Online (Sandbox Code Playgroud)

所以我们可以得到一个结果 post_cat = 1

根据我目前的数据库结构,我如何删除ID但改变它是一个很棒的slug?示例: -

Main category - http://domain.com/category/news/
Sub category  - http://domain.com/category/news/sports/
Run Code Online (Sandbox Code Playgroud)

让我知道脚本如何在列上News表示相同的线索?1post_cat

Lix*_*Lix 6

您可以使用.htaccess文件重写URL的为您服务.

.htaccess文件中的条目如下所示:

RewriteEngine on
RewriteCond $1 ^category 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ parseCategoryUrl.php?q=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

我将在这里划清界限,以帮助了解最新情况以及每条线的含义:

  1. 打开RewriteEngine.
  2. 此重写仅发生在主机名后面的第一个单词的categoryURL上 - 从该单词开始的所有URL将由下面的行处理.
  3. 该规则将排除指向实际文件的URL!-f
  4. 该规则将排除指向实际目录的URL!-d
  5. 实际规则将捕获整个request_uri并将其parseCategoryUrl.php作为q$ _GET数组中称为(查询)的参数传递给整个请求的文件.规则末尾的标志(L,QSA)做两件事.
    • L - 这是最后一条规则.处理完该行后,该.htaccess文件将停止对当前URL执行操作.
    • QSA - 将查询字符串附加到重写的URL(以便稍后我们可以解析它).

您的parseCategoryUrl.php文件可能包含类似于以下内容的内容:

$request = explode('/',$_GET['q'] );
array_shift($request);
Run Code Online (Sandbox Code Playgroud)

第一行将通过斜杠将请求拆分为数组 - 第二行从数组的开头删除单词类别(因为我们知道我们正在解析类别URL).

最后一个$request数组,带有一个URL示例,例如: http://example.domain.com/category/news/sports
将是这样的:

Array
(
    [0] => news
    [1] => sports
)
Run Code Online (Sandbox Code Playgroud)

所以你在这里看到你现在已经成功地将URL拆分成一个数组; 您现在要做的就是查询数据库并为用户提供正确的页面.
因为parseCategoryUrl.php页面实际上没有输出,所以您可以使用include()函数根据提供的URL插入正确的页面.


搜索引擎优化是指让您的网页及其网址为搜索引擎提供更多信息,以便搜索互联网的用户能够接收与其搜索查询相关的网页结果.查看URL的搜索引擎: http://domain.com/category/1/2 将无法提取大量信息.但是,如果您的网址包含(根据您的问题需要)类别信息,那么搜索引擎将能够扣除特定网址与以下内容相关的内容:

  • http://domain.com/category/news/ - 新闻
  • http://domain.com/category/news/sports - 体育新闻
  • http://domain.com/category/blog/ - 博客
  • 等等...