我正在尝试使用PHP 7.2
和nginx
设置服务器。导航到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>
答案 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;
}