本地环境下.htaccess配置PHP重定向失效问题排查
解决MVC框架的.htaccess重写问题
你当前的配置存在两处关键问题:
- 第一条
RewriteCond额外添加了\.php,会错误地去检查请求路径.php是否存在,不符合实际需求 RewriteRule的匹配规则^([A-Za-z0-9-]+)?$范围过窄,仅能匹配字母、数字、横杠组成的单级路径,无法覆盖多级路径或包含其他字符的请求
替换为以下配置,放在public目录下的.htaccess文件中即可实现需求:
<IfModule mod_rewrite.c> DirectoryIndex index.php RewriteEngine On # 跳过真实存在的文件和目录,确保静态资源正常访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将所有非真实资源的请求转发到index.php,保留完整请求路径作为url参数 RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
配置说明:
!-f和!-d分别排除真实存在的文件和目录,比如图片、CSS等静态资源不会被重写^(.*)$匹配所有请求路径,包括多级路径(如adjoasdjaos/abc/123)[QSA]保留原请求的查询字符串,比如localhost/mvc/public/adjoasdjaos?id=1会被转发为index.php?url=adjoasdjaos&id=1[L]标记为最后一条规则,停止后续重写规则的执行
额外注意:确保你的Apache服务器已开启mod_rewrite模块,Linux环境可通过a2enmod rewrite命令开启,之后重启Apache服务生效。
内容的提问来源于stack exchange,提问作者saiyan101
相关产品推荐
相关产品推荐

