在Web开发中,伪静态(即URL重写)能够让动态URL看起来像静态页面,既提升搜索引擎友好度,又增强用户体验,Apache服务器通过 mod_rewrite模块实现伪静态,本文从基础语法到实战案例,带你掌握如何书写规则。
在Apache配置文件中(httpd.conf或站点配置文件),确保以下语句未被注释:
LoadModule rewrite_module modules/mod_rewrite.so在虚拟主机配置或 .htaccess文件中,添加:
RewriteEngine On注意:如需全局生效,建议在虚拟主机
<Directory>块中配置;若仅影响当前目录,可使用.htaccess文件,需保证AllowOverride All开启。
RewriteRule—— 定义具体的重写规则
格式:RewriteRule 匹配模式 目标URL [标志]
示例:将 http://domain.com/article/123映射到 http://domain.com/article.php?id=123
RewriteRule ^article/(\d+)$ article.php?id=$1 [L]^article/(\d+)$:正则表达式,捕获数字部分。article.php?id=$1:将捕获的数字传递给id参数。[L]:表示“Last”,停止后续规则处理。RewriteCond—— 设置重写条件,用于更精细的控制
格式:RewriteCond 测试字符串 条件模式 [标志]
示例:仅对非真实文件或目录生效
RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]!-f:如果请求的不是真实文件。!-d:如果请求的不是真实目录。[QSA]:保留原始查询字符串,附加新参数。原始URL:/forum.php?mod=viewthread&tid=123
期望URL:/thread-123.html
RewriteRule ^thread-(\d+)\.html$ forum.php?mod=viewthread&tid=$1 [L]原始URL:/product.php?cat=2&page=3
期望URL:/product/category/2/page/3
RewriteRule ^product/category/(\d+)/page/(\d+)$ product.php?cat=$1&page=$2 [L,QSA]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php [L]所有未匹配到真实文件的请求都会被重写到
index.php,由框架内部路由处理。
开启日志调试
在配置中加入:
RewriteLog "/path/to/rewrite.log"RewriteLogLevel 9级别范围0-9,9最详细,生产环境请关闭或设为0。
使用[NC]忽略大小写RewriteRule ^Article/(\d+)$ article.php?id=$1 [L,NC]
外部重定向
加 [R=301]实现301跳转:RewriteRule ^old-page$ /new-page [R=301,L]
.htaccess语法,特别是空格和转义符。RewriteEngine On已开启,并且模块已加载。[L],或者在重写后添加 RewriteCond排除已重写路径。伪静态规则的本质是正则表达式匹配 + URL拼接,掌握好 RewriteRule与 RewriteCond的组合使用,就能应对绝大多数场景,建议从简单规则开始,逐步叠加条件,并善用日志调试,无论在传统CMS还是现代PHP框架中,Apache伪静态都是提升网站可维护性与可读性的利器。
相关文章:
0.6902s , 5882.4609375 kb Copyright 2023 Powered by 承德本地SEO排名优化sitemap