如何通过.htaccess捕获特定目录所有URL请求并转发处理?
实现方案
这其实是Apache URL重写的典型场景,直接在/directory/.htaccess文件中添加以下规则即可实现需求:
RewriteEngine On # 排除index.php本身,防止出现循环重写 RewriteCond %{REQUEST_URI} !^/directory/index\.php$ # 将当前目录下所有请求内部转发到index.php,保留原始URL RewriteRule ^.*$ index.php [L]
规则详解
RewriteEngine On:开启Apache的mod_rewrite模块,这是所有URL重写规则生效的前提,必须放在规则最开头。RewriteCond %{REQUEST_URI} !^/directory/index\.php$:这条条件用来避免服务器陷入无限循环——当请求已经指向index.php时,就不再执行后续的重写规则。RewriteRule ^.*$ index.php [L]:核心重写规则,匹配directory目录下的所有请求路径(^.*$表示任意字符组合),然后内部转发到当前目录的index.php处理。[L]标记表示这是最后一条执行的规则,处理完就停止后续规则解析。
额外说明
- 确保你的Apache服务器已经启用了
mod_rewrite模块,如果没开启的话,需要在服务器配置中启用它(比如通过a2enmod rewrite命令,具体根据你的服务器环境调整)。 - 用户浏览器地址栏的URL不会发生变化,所有转发都是服务器内部完成的。
- 在
index.php中,你可以通过$_SERVER['REQUEST_URI']变量获取到用户原始请求的完整路径,比如访问http://www.xxx.co/directory/somethingelse时,$_SERVER['REQUEST_URI']的值就是/directory/somethingelse,你可以基于这个值做对应的业务逻辑处理。
内容的提问来源于stack exchange,提问作者FedeKrum
相关产品推荐
相关产品推荐

