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

使用.htaccess重定向URL并隐藏PHP扩展名时自动跳转到未知文件夹

解决.htaccess重定向后出现404及跳转异常的问题

你的问题核心在于隐藏PHP扩展名的规则只覆盖了根目录的index请求,子目录下的请求没有被正确映射到对应的.php文件,所以访问/abc/index时服务器找不到对应的资源,返回404错误。我帮你梳理下问题原因和修正方案:

问题分析

你当前配置里的这条规则:

RewriteRule ^index$ index.php [L]

只会精确匹配根目录下的index请求(比如www.yourdomain.com/index),但对于子目录如www.yourdomain.com/abc/index完全不生效——因为^index$是从URL开头开始匹配,子目录的URL前缀是abc/,所以服务器会把/abc/index当成一个实际的文件或目录去查找,找不到就返回404。

修正后的完整.htaccess配置

把规则改成下面这样,就能覆盖所有目录下的无PHP扩展名请求:

Options +FollowSymLinks
RewriteEngine On

# 非www域名重定向到www(完整保留原有路径)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# 仅当请求的不是真实文件、目录或符号链接时,自动添加.php后缀
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ $1.php [L]

关键改动说明

  1. 扩展PHP扩展名隐藏的规则范围:
    把原来的^index$ index.php改成^(.*)$ $1.php后,任何不存在的文件/目录请求都会自动补上.php后缀。比如:

    • /index → /index.php
    • /abc/index → /abc/index.php
    • /user/profile → /user/profile.php
      只要对应的.php文件真实存在,就能正常访问。
  2. 保留原有www重定向逻辑:
    你的www重定向规则本身是没问题的,它会把所有非www的请求(比如yourdomain.com/abc)完整重定向到www.yourdomain.com/abc,不会丢失路径信息。

额外注意事项

  • 确保你的Apache服务器已经开启了mod_rewrite模块(默认一般是开启的,如果没开需要联系主机商或自行在配置中启用)。
  • 测试阶段可以把R=301改成R=302(临时重定向),避免浏览器缓存错误的重定向规则,确认所有请求正常后再改回301(永久重定向)。
  • 如果有特定页面不需要添加.php后缀(比如静态HTML页面),可以在规则前添加排除条件,比如:
    # 排除static-page请求,不添加.php后缀
    RewriteCond %{REQUEST_URI} !^/static-page$
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:14