You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP项目如何用.htaccess的mod_rewrite实现简洁URL(移除.php及冗余路径)

实现PHP项目的美观URL(移除.php扩展名+简化路径)

嘿,我正好处理过类似的需求,用Apache的mod_rewrite完全可以实现你要的效果,下面是一步步的配置方案:

前提准备

  • 先确认你的Apache服务器已经开启了mod_rewrite模块(大多数环境默认开启,如果没开,需要在Apache配置里启用它)
  • 在你的项目根目录(也就是localhost/myproject/对应的文件夹)新建或编辑.htaccess文件

.htaccess 具体配置

把下面的代码复制到.htaccess文件里,根据你的实际情况微调:

Options -Indexes +FollowSymLinks
RewriteEngine On

# 核心规则:将简洁URL内部映射到实际的PHP文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myproject/views/pages/%{REQUEST_URI}/%{REQUEST_URI}.php -f
RewriteRule ^([^/]+)$ views/pages/$1/$1.php [L]

# 重定向直接访问的原始PHP路径到美观URL(避免重复内容)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/myproject/views/pages/([^/]+)/\1\.php [NC]
RewriteRule ^ /myproject/%1 [R=301,L]

规则解释

  • Options -Indexes +FollowSymLinks:禁用目录索引(防止别人看到你的文件列表),允许服务器跟随符号链接,确保重写规则正常工作
  • RewriteEngine On:开启URL重写功能,这是所有规则的基础
  • 第一组规则:
    • RewriteCond %{REQUEST_FILENAME} !-d:检查用户请求的不是一个实际存在的目录
    • RewriteCond %{DOCUMENT_ROOT}/myproject/views/pages/%{REQUEST_URI}/%{REQUEST_URI}.php -f:检查对应的实际PHP文件(比如views/pages/login/login.php)是否存在
    • RewriteRule ^([^/]+)$ views/pages/$1/$1.php [L]:把用户输入的localhost/myproject/login内部映射到views/pages/login/login.php,[L]表示这是最后一条规则,匹配后不再往下执行
  • 第二组规则:
    • RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/myproject/views/pages/([^/]+)/\1\.php [NC]:捕获用户直接访问原始PHP文件的请求
    • RewriteRule ^ /myproject/%1 [R=301,L]:将这类请求301永久重定向到美观的URL,比如把localhost/myproject/views/pages/login/login.php跳转到localhost/myproject/login

注意事项

  • 把配置里的myproject替换成你实际的项目目录名,如果你的项目直接在Apache根目录(比如localhost/login),就把所有/myproject/改成/
  • 确保你的页面结构严格遵循views/pages/页面名/页面名.php的格式,比如登录页就是login/login.php,注册页就是register/register.php,这样规则才能正确匹配
  • 如果有特殊页面不符合这个结构,可以单独添加针对性的Rewrite规则
  • 测试前记得清空浏览器缓存,因为301重定向会被浏览器缓存,可能导致测试结果不准确

内容的提问来源于stack exchange,提问作者FranSto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:03