如何将指定.htaccess规则完整正确转换为Nginx配置
转换方案及疑问解答
关于try_files参数的疑问解答
你自行转换的前端控制器规则无需添加?$args参数。Nginx默认会将原始请求携带的查询参数自动传递给重写后的/index.php,只有当你需要手动覆盖、修改查询参数时,才需要显式添加?$args配置,常规场景下省略该参数完全可以正常工作。
完整转换后的Nginx配置
server { server_name example.com; root /var/www/example.com; index index.html index.htm index.php; # 对应.htaccess的Options -Indexes,关闭目录索引 autoindex off; # 对应.htaccess的全局CORS配置 add_header Access-Control-Allow-Origin "*"; location / { # 对应非目录下的末尾斜杠301重定向 rewrite ^/(.*)/$ /$1 permanent; # 对应前端控制器转发规则,替换原有=404的配置 try_files $uri $uri/ /index.php; } location ~ \.php$ { # 对应.htaccess的HTTP_AUTHORIZATION头传递规则 fastcgi_param HTTP_AUTHORIZATION $http_authorization; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } location ~ /\.ht { deny all; } # 对应.htaccess的隐藏.env文件规则 location ~ /\.env { deny all; return 403; } }
规则对应说明
autoindex off:对应原.htaccess中Options -Indexes配置,禁止目录列表访问- 全局
add_header Access-Control-Allow-Origin "*":对应原CORS配置 rewrite ^/(.*)/$ /$1 permanent:对应原非目录下末尾斜杠301重定向规则,Nginx默认会在检查路径是否为目录前执行该重写,符合原规则逻辑fastcgi_param HTTP_AUTHORIZATION $http_authorization:对应原HTTP授权头传递规则,确保PHP可以正常获取到Authorization请求头location ~ /\.env块:对应原隐藏.env文件的规则,禁止所有对.env文件的访问
内容的提问来源于stack exchange,提问作者Ranger
相关产品推荐
相关产品推荐

