为 nginx 设置 htaccess 规则

为 nginx 设置 htaccess 规则

嗨,我在 nginx 中设置 htaccess 规则时遇到了问题。我的 htaccess 是:

htaccess 规则为:

RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

我将其转换如下:

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/$request_uri last;
}

我读到过 if 对 nginx 来说是邪恶的,但我不明白这些规则。我尝试设置的应用程序是:

http://products.cogzidel.com/airbnb-clone/

现在,当我们尝试访问管理区域时,规则很有用。我们通过在 URL 中写入 /administrator 来访问它,规则将其作为 index.php 的输入,然后我们登录到该区域。但是应用此规则后,我在日志中看到错误 404 即将出现。让我提一下,nginx vhost 在使用此规则后可以正常重新加载,我也在服务器区域和位置区域添加了此规则,但不起作用

答案1

您想查看位置块http://nginx.org/en/docs/http/ngx_http_core_module.html#location和 try_files 指令http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

例如,如果你看看 wordpress 博客(一个相当全面的例子)http://wiki.nginx.org/WordPress你会看到这个:

 location /wordpress {
    try_files $uri $uri/ /wordpress/index.php?$args;
 }

 location ~ \.php$ {
    fastcgi_split_path_info ^(/wordpress)(/.*)$;
 }

意思是“直接在 /wordpress 中尝试该文件,否则将其传递给 index.php 进行处理”。

答案2

非常感谢您提供有关尝试文件的想法。我对其进行了研究并在以下位置输入了此块:try_files $uri $uri/ /index.php;

它起作用了但我无法访问http://my.url.com/administrator

此外,下面提到的堆栈链接最适合理解尝试文件,这对我也有帮助。

https://stackoverflow.com/questions/17798457/how-can-i-make-this-try-files-directive-work

相关内容