嗨,我在 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