apache htaccess到nginx配置错误


apache htaccess to nginx config error

我有一个htaccess,内容如下:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]
</IfModule>

我可以用两个在线工具转换它,但如果我把它们放在nginx配置文件中,它就会拒绝启动。

http://winginx.com/en/htaccess给出以下输出:

# nginx configuration index index.php;
location / {
rewrite ^(.*)//(.*)$ /%1/%2 redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?qa-rewrite=$0&$query_string break; 
} 
}

http://www.anilcetin.com/给出以下输出:

if ($uri ~ "^(.*)//(.*)$"){
    set $rule_0 1$rule_0;
    set $bref_1 $1;
    set $bref_2 $2;
}
if ($rule_0 = "1"){
    rewrite /. /$bref_1/$bref_2 permanent;
}
if (!-f $request_filename){
    set $rule_1 1$rule_1;
}
if (!-d $request_filename){
    set $rule_1 2$rule_1;
}
if ($rule_1 = "21"){
    rewrite ^/.*$ /index.php?qa-rewrite=$0&$args last;
}

我尝试了这两种方法,但似乎有一些错误,nginx在重新启动后拒绝启动。

有人吗?提前谢谢。

htaccess文件有三个元素。

第一个由index指令涵盖。

第二个执行永久重定向,以便删除URL中的任何双斜杠//。这很难用nginx实现,因为它规范了URL。尽管变量$request_uri包含原始值,但变量$uri包含归一化值。人们需要了解//在哪里引起问题,以便找到最佳解决方案。然而,使用下面的$uri意味着任何重定向都可能是不必要的。

第三种通常由try_files指令处理。

假设htaccess文件位于文档根目录的顶部,请尝试:

location / {
    index index.php;
    try_files $uri $uri/ /index.php?qa-rewrite=$uri&$args;
}