使用Nginx在Laravel API路由上找不到404

时间:2019-02-19 22:41:26

标签: php laravel nginx

我正在尝试使用PHP 7.2nginx设置服务器。导航到my-site.com/snow时可以加载laravel主页,但是无法加载API.php中定义的任何API路由。我所有的API路由都以/api/为前缀,例如/api/login。我所有的API路由都出现404错误。我在做什么错了?

location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  # With php-fpm (or other unix sockets):
  fastcgi_pass unix:/run/php/php7.2-fpm.sock;
  # With php-cgi (or other tcp sockets):
  # fastcgi_pass 127.0.0.1:9000;
}

location /snow {
  index index.php;
}

location /snow/api {
  root /var/www/html/snow;
  rewrite ^/api/(.*)$ /$1 break;
  try_files $uri $uri/ /api/index.php$is_args$args;
}

location ~ snow/api/.+\.php$ {
  root /var/www/html/snow;
  rewrite ^/api/(.*)$ /$1 break;
  #include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

.htaccess

Options -Indexes
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

<Files .env>
    Order allow,deny
    Deny from all
</Files>

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

2 个答案:

答案 0 :(得分:1)

我有同样的问题

我替换了

try_files $uri $uri/ =404;

使用

try_files $uri $uri/ /index.php$is_args$args;

成功了。

答案 1 :(得分:0)

如果您使用的是api.php路由文件,Laravel已经为这些路由添加了/api前缀,因此您可能会在配置中复制它们。检查/api/api/login是否有效。

如果上述方法可行,则您的nginx配置中不需要两个/api规则。删除这些规则后,您应该可以使用/api/login访问API。

您还可以尝试将nginx配置更新为以下配置,因为当前配置似乎没有指向Laravel的公共目录:

location /snow/api {
  root /var/www/html/snow/pubic;
  try_files $uri $uri/ /index.php?$query_string;
}