nginx 如何为托管在子域上的Laravel API应用程序配置.htaccess?

mkh04yzy  于 2022-11-02  发布在  Nginx
关注(0)|答案(2)|浏览(211)

我有一个域名mydomain.com和一个nginx空间来托管我的网站。URL地址mydomain.com已经在使用中,我不想再买一个域名,所以我创建了一个子域myapp.mydomain.com。然后我创建了一个用于测试的laravel API应用程序myapp,并通过FTP客户端将代码上传到/mydomain_com/myapp文件夹中。
现在的问题是我必须相应地配置我的.htaccess,这样应用程序才能正确运行。
在目前的状态下,主页路由/工作正常,但其他一切都不工作。

\我的网域_com\我的应用程序.环境:

...
APP_NAME=myapp
APP_ENV=local
APP_KEY=base64:U4v....
APP_DEBUG=false
APP_URL=https://myapp.mydomain.com
...

我的路线是:

\mydomain_com\我的应用程序\路由\web.php

Route::get('/', function () {
    return view('welcome');
});
Route::get('/aaa', function () {
    return view('welcome');
});

\mydomain_com\我的应用程序\路由\api.php

Route::apiResource('os', OsController::class);

现在,当我转到https://myapp.mydomain.com时,会得到:

然而,当我尝试访问https://myapp.mydomain.com/aaahttps://myapp.mydomain.com/api/os时,我得到了这个错误↓

请问我的\mydomain_com\myapp\.htaccess有什么问题↓?为什么首页不能用?

RewriteEngine On

RewriteBase /

# 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]

RewriteCond %{HTTP_HOST} !^subdomain
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

RewriteCond %{HTTP_HOST} ^subdomain
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/ [L]
hsvhsicv

hsvhsicv1#

我使用的htaccess已经与laravel和我张贴在下面,它与我的工作很好

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

    RewriteEngine On

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

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

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

还要检查服务器上是否启用了mod_rewrite,如果使用的是ubuntu和apache2服务器,请使用以下命令启用mod_rewrite

sudo a2enmod rewrite

请参考:Enable mod_rewrite

hmae6n7t

hmae6n7t2#

用这个更新根文件夹中的.htaccess文件的内容。它应该可以工作。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Removes index.php from ExpressionEngine URLs
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteCond %{REQUEST_URI} !/system/.* [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

    # Directs all EE web requests through the site index file
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

相关问题