我来为您详细讲解PHP友好URL的实现攻略。
什么是友好URL
友好URL(SEO URL,美化URL)是指通过对URL进行处理,使其更加美观,更容易让人理解,也更容易被搜索引擎收录的URL。友好URL是将原本的动态URL转化为静态的URL,用户在页面下方看到的URL都是静态的URL。例如将 http://www.example.com/index.php?id=1
转化为 http://www.example.com/1.html
这样的静态URL。
实现步骤
Step 1:开启Apache的rewrite模块
首先需要在主机环境中开启Apache的rewrite模块。可以通过Apache的 httpd.conf
配置文件中找到 LoadModule rewrite_module modules/mod_rewrite.so
,如果前面有注释符号“#”则需要去掉注释符号以启用此模块。
Step 2:编写.htaccess文件
在网站的根目录下面编写一个名为 .htaccess
的文件,文件名前面有一个点符号,它是一个隐藏文件。.htaccess
的作用是告诉 Apache 服务器如何处理网站的请求。
下面是一个示例的 .htaccess
文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
代码解释:
RewriteEngine On
表示开启URL重写功能。RewriteCond %{REQUEST_FILENAME} !-d
表示如果请求的不是一个目录。RewriteCond %{REQUEST_FILENAME} !-f
表示如果请求的不是一个文件。RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
表示规定了重写规则。其中^
表示开始匹配,(.*)
表示匹配任意字符,$
表示结束匹配。QSA
表示附加在查询字符串后面的参数将被追加到新的URL之后,L
表示这个规则是最后一个规则,不需要再进行匹配了。
Step 3:修改PHP文件
在 index.php
中通过 $_GET
获取URL参数,然后根据实际情况进行处理。
$url = $_GET['url'];
$urlArr = explode('/', rtrim($url, '/'));
代码解释:
$_GET['url']
获取 URL 参数。rtrim($url, '/')
去除URL末尾的/
字符。explode('/', $url)
将URL按照/
进行分割,用于后续实现路由功能。
接下来可以按照分割后的值进行路由功能的实现。
Step 4:路由功能的实现
路由功能表示根据用户请求的URL路径进行业务处理。例如用户请求的URL路径为 /article/list
,则我们需要执行“查询文章列表”的业务逻辑。
下面是一个路由功能的示例:
if (empty($urlArr[0])) { // 如果参数为空,则默认进入首页
$controller = new HomeController;
$controller->index();
} elseif ($urlArr[0] == 'about') { // 如果参数为 about,则进入关于页面
$controller = new AboutController;
$controller->index();
} elseif ($urlArr[0] == 'article' && isset($urlArr[1]) && $urlArr[1] == 'list') { // 如果参数为 article/list,则查询文章列表
$controller = new ArticleController;
$controller->index();
} elseif ($urlArr[0] == 'article' && isset($urlArr[1]) && is_numeric($urlArr[1])) { // 如果参数为 article/id,则查询指定文章详情
$controller = new ArticleController;
$controller->show($urlArr[1]);
} else {
// 处理不存在的页面
}
代码解释:
- 如果
$urlArr[0]
参数为空,则默认进入首页。 - 如果
$urlArr[0]
参数为about
,则进入关于页面。 - 如果
$urlArr[0]
参数为article
,并且$urlArr[1]
参数为list
,则查询文章列表。 - 如果
$urlArr[0]
参数为article
,并且$urlArr[1]
参数为文章ID,就查询指定文章详情。
Step 5:URL静态化
使用以上方法让PHP代码支持静态化的URL。除了让代码支持URL静态化,还需要在网站后台进行专业的URL静态化操作。以下是一个静态化URL的示例:
RewriteRule ^news/([0-9]+)\.html$ news_detail.php?id=$1
这里的URL是以 .html
为后缀的静态化URL,以实现更高效的处理效果。
示例说明
示例一:对文章详情页进行静态化处理
假设我们的文章详情页URL为 http://www.example.com/article.php?id=10
,我们可以通过 URL 重写的方式将其转化为静态URL http://www.example.com/article/10.html
。
修改 .htaccess
文件,添加以下规则:
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [QSA,L]
接下来修改 article.php
文件,从 $_GET
中获取文章 ID,并根据实际情况处理业务逻辑。
示例二:对文章分类页面进行静态化处理
假设我们将文章分类页面设计为 /article/list/?cat_id=1
,我们可以通过 URL 重写的方式将其转化为静态 URL http://www.example.com/article/cat1.html
。
修改 .htaccess
文件,添加以下规则:
RewriteRule ^article/cat([0-9]+)\.html$ article.php?cat_id=$1 [QSA,L]
接下来修改 article.php
文件,从 $_GET
中获取分类 ID,并根据实际情况处理业务逻辑,例如查询该类型的文章列表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php 友好URL的实现(吐血推荐) - Python技术站