繁体   English   中英

.htaccess用于安装在子文件夹中的Laravel应用

[英].htaccess for a Laravel app installed in a subfolder

我有一个域名,例如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的禁止返回

我假设您已将应用程序安装在共享主机上,并且由于该应用程序正在运行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和作曲者等人使用一个更安全的应用程序。在不干扰.htaccess的情况下,文件不会公开可用。

哦,这也是默认的.htaccess代码,该代码应位于您的公用文件夹<project>/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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM