将 nginx 转换为 htaccess(apache)

convert nginx to htaccess(apache)

我在 Nginx 中得到了以下重写规则,我在其中尝试转换为 apache/.htaccess 规则,在这些规则中我一直出错并且效果不佳,没有找到任何从 nginx 到 .htaccess 的在线转换器恰恰相反,我希望有谁能帮我转换一下。

这是我的 nginx 规则:

if (!-d $request_filename){ 
 set $rule_0 1$rule_0; 
} 
if (!-f $request_filename){ 
 set $rule_0 2$rule_0; 
} 
if ($rule_0 = "21"){ 
 rewrite ^/(.*?)([^/]*)$ /index.php? last; 
}

这是我的 .htaccess 尝试:

<IfModule mod_rewrite.c>
RewriteEngine on
# Apache 2.4
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*?)([^/]*)$ index.php? [QSA,PT,L]
RewriteEngine On
            RewriteBase /
        if (!-d $request_filename){ 
 set $rule_0 1$rule_0; 
} 
if (!-f $request_filename){ 
 set $rule_0 2$rule_0; 
} 
if ($rule_0 = "21"){ 
 rewrite ^/(.*?)([^/]*)$ /index.php? last; 
}

ErrorDocument 404 /404.php

</IfModule>

但是每当我尝试这样做时,我总是遇到解析错误,有人有解决这个问题的经验吗?

你看起来已经做到了,但不知为什么你还在中间嵌入了原始的Nginx指令(这自然会导致解析错误)。

因此,等效的 Apache/.htaccess 指令似乎只有以下内容:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*?)([^/]*)$ index.php? [QSA,L]

.htaccess 上下文中不需要 PT 标志。

您不需要 <IfModule> 包装器,除非这些指令是 可选的


if (!-d $request_filename){ 
 set $rule_0 1$rule_0; 
}

然而,第一个 set 指令暗示 $rule_0 变量可能已经在配置中设置?