本文目录导读:

我来详细说明PHP项目搭配伪静态的使用方法和配置方案:
伪静态原理
伪静态是将动态URL(如 index.php?id=1)转换为看起来像静态页面(如 article/1.html)的技术,提高SEO友好性和用户体验。
常见Web服务器配置
Apache服务器(.htaccess文件)
# 开启重写引擎
RewriteEngine On
# 设置基础路径
RewriteBase /
# 伪静态规则示例
RewriteRule ^article/(\d+).html$ index.php?id=$1 [L,QSA]
RewriteRule ^category/(\w+)/page/(\d+)$ index.php?cat=$1&page=$2 [L,QSA]
RewriteRule ^product/([a-z]+)-(\d+).html$ index.php?action=product&name=$1&id=$2 [L,QSA]
# 排除真实文件或目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 其他请求都转发到index.php(适用于单入口框架)
RewriteRule ^(.*)$ index.php [QSA,L]
Nginx服务器配置
server {
listen 80;
server_name yourdomain.com;
root /path/to/project;
index index.php index.html;
# 伪静态规则
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 自定义伪静态规则
location /article/ {
rewrite ^/article/(\d+).html$ /index.php?id=$1 last;
}
location /category/ {
rewrite ^/category/(\w+)/page/(\d+)$ /index.php?cat=$1&page=$2 last;
}
# PHP处理
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
IIS服务器(web.config)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Article Rewrite" stopProcessing="true">
<match url="^article/(\d+).html$" />
<action type="Rewrite" url="index.php?id={R:1}" />
</rule>
<rule name="Category Rewrite" stopProcessing="true">
<match url="^category/(\w+)/page/(\d+)$" />
<action type="Rewrite" url="index.php?cat={R:1}&page={R:2}" />
</rule>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
PHP代码配合实现
路由解析示例
<?php
// 获取当前URL路径
$requestUri = $_SERVER['REQUEST_URI'];
$path = parse_url($requestUri, PHP_URL_PATH);
// 简单的路由处理
switch(true) {
// 匹配 /article/123.html
case preg_match('/^\/article\/(\d+)\.html$/', $path, $matches):
$id = $matches[1];
handleArticle($id);
break;
// 匹配 /category/php/page/2
case preg_match('/^\/category\/(\w+)\/page\/(\d+)$/', $path, $matches):
$category = $matches[1];
$page = $matches[2];
handleCategory($category, $page);
break;
// 默认路由
default:
handleDefault();
break;
}
使用mvc框架(ThinkPHP示例)
// config/route.php
return [
// 路由规则配置
'__pattern__' => [
'id' => '\d+',
'name' => '\w+',
],
// 伪静态路由
'article/:id' => 'index/article/detail',
'category/:cat/page/:page' => 'index/category/index',
'product/:name-:id' => 'index/product/detail',
// 强制路由
'route_rule' => ['article', 'category', 'product'],
];
URL生成帮助函数
<?php
/**
* 生成伪静态URL
*/
function url($action, $params = []) {
switch($action) {
case 'article':
return "/article/{$params['id']}.html";
case 'category':
return "/category/{$params['cat']}/page/{$params['page']}";
case 'product':
return "/product/{$params['name']}-{$params['id']}.html";
default:
return "/index.php?action={$action}&" . http_build_query($params);
}
}
// 使用示例
echo url('article', ['id' => 123]); // /article/123.html
echo url('category', ['cat' => 'php', 'page' => 2]); // /category/php/page/2
echo url('product', ['name' => 'book', 'id' => 456]); // /product/book-456.html
常见问题解决
处理中文URL
// 编码处理
$name = urlencode($name);
$url = "/product/{$name}-{$id}.html";
// 解码处理
$name = urldecode($matches[1]);
分页处理
// 生成分页URL
function pageUrl($base, $page) {
return "{$base}/page/{$page}";
}
// 处理分页请求
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
实际项目示例
项目结构
project/
├── .htaccess # 伪静态规则
├── index.php # 入口文件
├── router.php # 路由处理
├── controllers/ # 控制器
├── models/ # 模型
└── views/ # 视图
完整示例代码
<?php
// router.php
class Router {
private $routes = [];
public function addRoute($pattern, $callback) {
$this->routes[$pattern] = $callback;
}
public function dispatch($uri) {
$uri = parse_url($uri, PHP_URL_PATH);
foreach ($this->routes as $pattern => $callback) {
if (preg_match($pattern, $uri, $matches)) {
array_shift($matches); // 移除完全匹配
return call_user_func_array($callback, $matches);
}
}
// 404处理
header("HTTP/1.0 404 Not Found");
echo "Page not found";
}
}
// 使用
$router = new Router();
$router->addRoute('/^\/article\/(\d+)\.html$/', function($id) {
echo "Article ID: " . $id;
});
$router->addRoute('/^\/category\/(\w+)\/page\/(\d+)$/', function($cat, $page) {
echo "Category: " . $cat . ", Page: " . $page;
});
$router->dispatch($_SERVER['REQUEST_URI']);
通过以上配置和代码,PHP项目就能完美配合伪静态使用,实现SEO友好的URL结构。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播