.htaccess配置RewriteRule后如何实现根目录正常访问index.php
问题原因
当前重写规则的正则^([a-zA-Z0-9_-]*)/?$中,量词*表示匹配前置字符集0次或多次,站点根路径的空路径内容刚好符合0次匹配的规则,因此会被转发到producto-test.php,同时携带空值的stock参数,导致无法正常加载index.php。
修复方案
选择以下任意一种方式调整即可:
方案1:修改正则匹配量词(推荐,最简洁)
将正则中的量词*替换为+,+表示匹配前置字符集1次及以上,这样空的根路径就不会命中这条重写规则,服务器会自动加载目录下的index.php。调整后的完整配置:
RewriteEngine On RewriteRule ^([a-zA-Z0-9_-]+)/?$ producto-test.php?stock=$1 [QSA]
方案2:增加重写条件排除根路径
如果后续需要保留0次匹配的逻辑,可以增加重写判断条件,明确排除根目录的请求:
RewriteEngine On # 根路径请求不执行后续重写 RewriteCond %{REQUEST_URI} !^/$ RewriteRule ^([a-zA-Z0-9_-]*)/?$ producto-test.php?stock=$1 [QSA]
效果验证
调整配置后:
- 访问
http://www.example.com/时不会命中重写规则,正常加载index.php - 访问类似
http://www.example.com/sku123的路径时,会正常转发到producto-test.php?stock=sku123,原有的查询参数保留逻辑(QSA标记)不受影响
内容的提问来源于stack exchange,提问作者Jesiqa
相关产品推荐
相关产品推荐

