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

Php .htaccess用于安装在子文件夹中的Laravel应用程序,php,laravel,.htaccess,Php,Laravel,.htaccess,我有一个域名,比如www.example.com 主站点位于FTP空间中,显示为/example.com 我在/example.com/Laravel_app下安装了(复制/粘贴,叹息…:()我的Laravel app) 如果我使用完整的urlhttp://www.example.com/laravel_app/public/index.php 问题是,很明显,我只想使用路径http://www.example.com/laravel_app 在laravel\u应用程序的根目录中,我尝试粘贴此

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

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

我在
/example.com/Laravel_app
下安装了(复制/粘贴,叹息…:()我的Laravel app)

如果我使用完整的url
http://www.example.com/laravel_app/public/index.php

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

laravel\u应用程序的根目录中,我尝试粘贴此
.htaccess

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

因此,我的问题与应用程序公用文件夹的
.htaccess
无关,而是与应用程序根文件夹的
.htaccess
有关

我怎样才能成功地服务

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

访问

http://www.example.com/laravel_app

?

事实上我让拉威尔退回了404

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


重新启动发动机
重写cond%{REQUEST_FILENAME}!-f
重写cond%{REQUEST_FILENAME}!-d
重写规则^(.*)$public/index.php/$1[L]

但是有了这个,我让apache返回了一个禁止的

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

将.htaccess恢复到原来的/与laravel一起部署的版本

理想情况下,您不应该让您的项目以公共html上传,因为它会将所有文件公开给web

将除
public
之外的所有项目文件移动到
public\u html
下面的目录中

例如

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

require\uuuu DIR\uuuu./../vendor/autoload.php';

$app=require\u once\uuuu DIR\uuuu./../bootstrap/app.php';

…以反映您移动YRU项目文件夹的路径

require\uuuu DIR\uuuu./../laravel/vendor/autoload.php';
$app=require\u once\uu DIR\uu.'/../../laravel/bootstrap/app.php';

本质上,在这个上下文中,
。/
意味着返回一个文件夹,因此目的是将其返回到可以找到
laravel/vendor/
文件夹的位置,反之亦然

实际上,这会解决您的问题,并使您的.env和composer等应用程序更安全。如果不影响您的.htaccess,文件将不会公开提供

哦,这里还有默认的
.htaccess
代码,应该在您的公用文件夹下
/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>

选项-多视图-索引
重新启动发动机
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}!-d
重写cond%{REQUEST_URI}(+)/$
重写规则^1[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}!-d
重写cond%{REQUEST_FILENAME}!-f
重写规则^index.php[L]

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

将.htaccess恢复到原来的/与laravel一起部署的版本

理想情况下,您不应该让您的项目以公共html上传,因为它会将所有文件公开给web

将除
public
之外的所有项目文件移动到
public\u html
下面的目录中

例如

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

require\uuuu DIR\uuuu./../vendor/autoload.php';

$app=require\u once\uuuu DIR\uuuu./../bootstrap/app.php';

…以反映您移动YRU项目文件夹的路径

require\uuuu DIR\uuuu./../laravel/vendor/autoload.php';
$app=require\u once\uu DIR\uu.'/../../laravel/bootstrap/app.php';

本质上,在这个上下文中,
。/
意味着返回一个文件夹,因此目的是将其返回到可以找到
laravel/vendor/
文件夹的位置,反之亦然

实际上,这会解决您的问题,并使您的.env和composer等应用程序更安全。如果不影响您的.htaccess,文件将不会公开提供

哦,这里还有默认的
.htaccess
代码,应该在您的公用文件夹下
/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>

选项-多视图-索引
重新启动发动机
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}!-d
重写cond%{REQUEST_URI}(+)/$
重写规则^1[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}!-d
重写cond%{REQUEST_FILENAME}!-f
重写规则^index.php[L]
参考此参考此
/home/<username>
  [laravel] <-- Make this directory
  [public_ftp]
  [public_html]
  [ssl]
  etc..
/home/<username>/public_html/laravel-app
  [public_html]
    [laravel-app]
     -index.html
     -robots.php
     -.htaccess
     -[css]
     -[js]
     -[svg]
     etc..
 <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>