将Nginx重写规则转换为Apache Rewrite规则遇阻求助
Nginx到Apache的Rewrite规则转换方案
先明确原Nginx规则的核心逻辑:
- 静态资源直接访问,不存在的路径转发到
index.php并保留原请求参数 - 仅允许访问真实存在的PHP文件,否则返回404
- 给PHP设置环境变量
FWENV=development
对应的.htaccess完整规则如下:
# 开启Rewrite引擎 RewriteEngine On # 设置默认索引页(对应Nginx的index指令) DirectoryIndex index.php # 处理PHP请求:仅允许访问真实存在的.php文件,否则返回404(对应Nginx的location ~ ^/(.*\.php)$块) RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+\.php)$ - [R=404,L] # 传递FWENV环境变量给PHP(对应Nginx的fastcgi_param FWENV指令) SetEnv FWENV development # 静态资源直接放行,不做重写 RewriteRule ^.*\.(gif|jpe?g|png|css|ttf|js)$ - [L] # 核心重写逻辑:对应Nginx的try_files $uri /index.php?$uri&$args # 非真实文件/目录的请求,转发到index.php并保留原请求参数 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?uri=$1&%{QUERY_STRING} [L,QSA]
规则详解
DirectoryIndex index.php
对应Nginx的index index.php;,设置访问目录时默认加载的文件。PHP文件校验规则
匹配所有.php结尾的请求,若文件不存在直接返回404,避免伪静态转发到index.php处理不存在的PHP文件,完全对应Nginx的try_files $uri =404;逻辑。SetEnv FWENV development
给PHP设置环境变量,需确保Apache的mod_env模块已启用。静态资源放行
和你之前的规则逻辑一致,匹配指定后缀的静态资源直接放行,L标记终止后续规则处理。核心重写规则
解决你遇到的example.com/blah这类无斜杠路径无法重写的问题:- 两条
RewriteCond判断请求的不是真实文件/目录 ^(.*)$匹配所有路径(包括无斜杠的单段路径),转发到index.php时保留原URI和查询参数,QSA标记确保原参数和新参数自动合并。
- 两条
注意事项
- 需确保Apache的
mod_rewrite模块已启用 - 站点配置中需设置
AllowOverride All,允许.htaccess文件生效
内容的提问来源于stack exchange,提问作者user3205093
相关产品推荐
相关产品推荐

