如何编写.htaccess实现子目录无重定向指向父目录index.php?
实现子目录无重定向指向根index.php的.htaccess配置
嘿,这个需求很常见,尤其是做单页应用或者统一路由处理的时候,用Apache的mod_rewrite就能轻松搞定。下面是具体的配置步骤和代码:
前提确认
首先要确保你的Apache服务器已经启用了mod_rewrite模块——这是所有重写规则生效的基础。如果还没开启,你需要在服务器配置里启用它(比如在httpd.conf里去掉#LoadModule rewrite_module modules/mod_rewrite.so前面的注释)。
.htaccess配置代码
在/myDirectory/目录下创建(或修改).htaccess文件,写入以下内容:
RewriteEngine On RewriteBase /myDirectory/ # 仅当请求的不是真实文件或目录时,转发到index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
代码解释
让我拆解一下每一行的作用,方便你理解:
RewriteEngine On:开启URL重写引擎,没有这一行所有重写规则都不会生效RewriteBase /myDirectory/:设置重写的基准路径,确保规则只在/myDirectory/目录下生效,避免和其他目录的规则冲突RewriteCond %{REQUEST_FILENAME} !-f:检查当前请求的路径不是一个真实存在的文件(比如style.css、logo.png这类真实文件会被排除在外)RewriteCond %{REQUEST_FILENAME} !-d:检查当前请求的路径不是一个真实存在的目录(比如/myDirectory/images这类真实目录会被排除在外)RewriteRule ^ index.php [L]:如果上面两个条件都满足,就把所有请求转发到index.php处理;[L]表示这是最后一条规则,处理完就停止后续规则的执行
效果说明
配置完成后,当用户访问/myDirectory/ABC、/myDirectory/XYZ/123这类不存在的子目录或路径时,服务器会直接把请求交给/myDirectory/index.php处理,浏览器地址栏的URL不会发生变化(没有外部重定向)。而如果请求的是真实存在的文件或目录,规则会自动跳过,正常返回对应的资源。
内容的提问来源于stack exchange,提问作者James S.
相关产品推荐
相关产品推荐

