核心PHP博客.htaccess伪静态URL配置求助
解决方案:配置伪静态URL
以下是整合所有需求的完整.htaccess配置,同时修复了原有规则的冗余问题(比如重复开启RewriteEngine):
## 开启重写引擎(仅需一次) RewriteEngine On ## 强制HTTPS并移除www RewriteCond %{HTTP_HOST} ^www\.example\.com [OR] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] ## 伪静态规则:将路径作为slug转发到index.php # 排除真实存在的文件和目录,避免影响静态资源(如css、js、图片) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 根目录直接访问仍走index.php(列表页),非根路径则传递slug参数 RewriteRule ^([^/]+)?$ index.php?slug=$1 [QSA,L] ## 移除.php后缀(仅对真实存在的PHP文件生效) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L] ## 错误文档配置 ErrorDocument 404 https://example.com/err?code=404 ErrorDocument 500 https://example.com/err?code=500
关键规则说明:
- 合并HTTPS与www移除规则:通过
OR条件把两个重定向需求合并成一组,减少规则冗余,同时使用R=301(永久重定向)利于SEO。 - 伪静态核心规则:
!-f和!-d确保只对不存在的文件/目录生效,不会干扰静态资源或其他真实文件的访问。^([^/]+)?$匹配根路径(空,对应博客列表页)或单个路径段(即文章slug),QSA参数可保留可能存在的其他查询参数。- 用户访问
https://example.com/my-blogpost-url-slug时,服务器内部会转发到index.php?slug=my-blogpost-url-slug,完全适配你现有PHP代码的判断逻辑。
- 调整移除.php规则顺序:放在伪静态规则之后,且添加
%{REQUEST_FILENAME}\.php -f条件,确保仅当对应PHP文件真实存在时才移除后缀,避免和伪静态路径冲突。
注意事项:
- 确保服务器已启用
mod_rewrite模块。 - 测试阶段可先用
R=302临时重定向,确认规则生效后再改为R=301永久重定向。 - 若后续有多级路径需求(如分类页),可再调整伪静态规则,当前配置已满足单篇文章slug的需求。
内容的提问来源于stack exchange,提问作者zaacwiliam
相关产品推荐
相关产品推荐

