将 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
变量可能已经在配置中设置?
我在 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
变量可能已经在配置中设置?