如何在 NGINX 中复制我的 .htaccess 功能

如何在 NGINX 中复制我的 .htaccess 功能

.htaccess我在 apache 中有以下文件,它可以将所有请求重定向到app/index.php带或不带GET参数。我刚刚安装了 NGINX,但我的应用程序无法运行。有人能帮忙在 NGINX 中复制相同的功能吗?谢谢。

RewriteEngine on    

Options -Indexes

RewriteRule    ^$ app/ [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ app/index.php?url=$1 [QSA,L]

答案1

使用重写模块. 类似这样的操作就可以了:

location / {
  autoindex off;

  rewrite ^/$ app/ last;
  if (!-e $request_filename) {
    rewrite ^/(.*)$ app/index.php?url=$1;
  }
}

答案2

使用尝试文件

大多数配置不需要使用重写模块。

apache 重写规则的意思是:

  • RewriteRule ^$ app/ [L]- 将 URL / 发送到应用程序目录
  • RewriteCond %{REQUEST_FILENAME} !-d- 如果请求不是目录
  • RewriteCond %{REQUEST_FILENAME} !-f- 如果请求不是文件
  • RewriteCond %{REQUEST_FILENAME} !-l- 如果请求不是符号链接
  • 然后将请求发送至app/index.php?url=$1

在 nginx 中,等效的方法是:

# No automatic directory listings
autoindex off;

# Send the root url to the app dir
index index.php;
rewrite ^/$ app/ last;

# check if the url matches a file, directory and if not send to app/index.php
try_files $uri $uri/ app/index.php?url=$uri;

检查符号链接是多余的,因为符号链接也是一个文件或目录。

相关内容