【问题标题】:.htaccess for a Laravel app installed in a subfolder.htaccess 用于安装在子文件夹中的 Laravel 应用程序
【发布时间】:2019-03-11 19:57:08
【问题描述】:

我有一个域名,例如www.example.com

主站点位于 FTP 空间上,显示为 /example.com

我在/example.com/laravel_app 下安装了(复制/粘贴,叹息...:()我的 Laravel 应用程序。

如果我使用完整的 url http://www.example.com/laravel_app/public/index.php 访问,我可以打开 laravel 应用程序,它可以正常工作。

问题是,很明显,我只想使用路径http://www.example.com/laravel_app 来访问它。

laravel_app的根目录下,我尝试粘贴这个.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

/example.com/laravel_app/public 中,我正在使用这个`.htaccess

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

    RewriteEngine On
    RewriteBase /laravel_app/

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

所以我的问题与应用程序公用文件夹的.htaccess 无关,而与应用程序根文件夹的.htaccess 无关。

如何才能成功发球

http://www.example.com/laravel_app/public/index.php

访问

http://www.example.com/laravel_app

?

实际上我让 Laravel 返回了 404

我尝试了这个变体(看到我的一些问题与这个非常相似)

<IfModule mod_rewrite.c>
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ public/index.php/$1 [L] 
</IfModule>

但是有了这个我得到了 apache 返回一个禁止

【问题讨论】:

标签: php laravel .htaccess


【解决方案1】:

我假设您已经在共享主机上安装了您的应用程序,并且因为它运行的是 Apache,所以这个解决方案应该可以工作。

将您的 .htaccess 恢复到其原始/使用 laravel 部署的内容。

理想情况下,您不应该将项目上传到 public_html,因为它会将所有文件暴露给网络。

将你所有的项目文件除了public移动到public_html下面的目录。

例如。

/home/<username>
  [laravel] <-- Make this directory
  [public_ftp]
  [public_html]
  [ssl]
  etc..

然后在您的public_html 中将您的public 文件夹中的文件移动到您要提供文件的目录(您要使用您的应用程序的地址)。

/home/<username>/public_html/laravel-app
  [public_html]
    [laravel-app]
     -index.html
     -robots.php
     -.htaccess
     -[css]
     -[js]
     -[svg]
     etc..

现在编辑laravel-app 文件夹中的index.html 文件并同时更改:

require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

..反映您移动 yoru 项目文件夹的路径。

require __DIR__.'/../../laravel/vendor/autoload.php'; $app = require_once __DIR__.'/../../laravel/bootstrap/app.php';

在这种情况下,../ 基本上意味着返回一个文件夹,因此目标是将其带回找到laravel/vendor/ 文件夹的位置,反之亦然。

实际上,这应该可以解决您的问题并构建更安全的应用程序,因为您的 .env 和 composer 等文件不会在不与您的 .htaccess 混淆的情况下公开可用。

哦,这也是默认的.htaccess 代码,应该在您的公共文件夹&lt;project&gt;/public 下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 2017-05-15
    • 2015-03-10
    • 2016-05-27
    • 2022-10-13
    • 2014-09-15
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多