【问题标题】:how should I use output of conversion of htaccess rewrite rules to nginx rewrite rules我应该如何使用将 htaccess 重写规则转换为 nginx 重写规则的输出
【发布时间】:2015-07-08 20:16:39
【问题描述】:

我用的是neginx,那我需要把htaccess重写规则转成neginx重写规则。我使用this 进行转换。现在我想知道我应该如何使用输出?

.htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

ErrorDocument 404 /error404.html

nginx 规则: (输出)

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

我应该如何使用输出?

需要注意的是,我在不同的文件夹中有多个 .htaccess (3 个不同的文件夹中有 3 个 .htaccess 文件)

【问题讨论】:

    标签: php apache .htaccess nginx webserver


    【解决方案1】:

    在 nginx 中,没有 htaccess 文件之类的东西。您所有的 nginx 规则都需要直接进入 nginx 配置文件。

    见:http://nginx.org/en/docs/beginners_guide.html#conf_structure

    由于您的 htaccess 文件位于不同的文件夹中,您需要做的是将规则包装在 location 块中。

    例如,如果您发布的规则是从“blogs”文件夹中的 htaccess 文件翻译而来的,您可以这样做:

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

    【讨论】:

    • 啊,我明白了,对于其他规则(来自其他 htaccess 文件),我应该像这样在配置文件中创建新的locationlocation /folder_name/ {},对吧?
    • 我的第二个(最后)问题是:为什么最后一行没有在 nginx 规则中翻译? ErrorDocument 404 /error404.html
    • @stack 是的,如果 htaccess 文件位于文档根目录中,那么位置将是:location / {},它将是非常最后一个的位置。至于第二个问题,可能翻译工具不知道怎么做。试试:error_page 404 = /error404.html;
    • 我可以问一个新问题吗? (与主题无关)
    猜你喜欢
    • 2014-06-30
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2011-04-16
    • 2021-04-04
    相关资源
    最近更新 更多