如何将伪目录形式URL重定向至指定PHP文件并排除默认规则干扰
解决members路径的重定向例外问题
嘿,这个场景太常见了!服务器的默认规则(找不到对应文件夹就自动转向同名PHP文件)会优先触发,导致你的members路径请求被截胡到members.php。要解决这个问题,核心就是把members的重定向规则放在所有默认规则的最前面,让Apache先处理你的自定义规则,跳过后面的默认匹配。
具体操作步骤
- 打开你的
.htaccess文件,在最顶部添加以下重写规则:
# 开启重写引擎(如果文件里已经有这行,就不用重复加) RewriteEngine On # 处理members路径的重定向,作为默认规则的例外 RewriteRule ^members/([^/]+)$ /infos.php?name=$1 [L,QSA]
- 确保这部分代码在服务器默认的“文件夹转PHP”规则之前(通常默认规则是类似下面这样的,你不用修改它,只要把上面的规则放前面就行):
# 服务器默认的规则示例(不用改,保持在你添加的规则之后) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L]
规则解释
^members/([^/]+)$:匹配所有members/xxx格式的URL,其中([^/]+)会捕获batman这类不含斜杠的用户名部分,作为后续的$1变量。[L]:表示“Last”,匹配到这条规则后就停止执行后续规则,完美跳过后面的默认规则,避免被导向members.php。[QSA]:如果原URL带有额外的查询参数(比如members/batman?foo=bar),会自动把参数附加到目标URL上(变成infos.php?name=batman&foo=bar),保留原有请求的参数信息。
测试验证
保存.htaccess后,访问www.mysite.com/members/batman,应该直接跳转到www.mysite.com/infos.php?name=batman,而不是members.php。如果还是有问题,可以检查服务器的AllowOverride配置是否允许.htaccess生效(大部分虚拟主机默认都是开启的)。
内容的提问来源于stack exchange,提问作者Corlin
相关产品推荐
相关产品推荐

