Php 避免使用laravel的公用文件夹,直接在web服务器中打开根目录

Php 避免使用laravel的公用文件夹,直接在web服务器中打开根目录,php,.htaccess,laravel,webserver,laravel-4,Php,.htaccess,Laravel,Webserver,Laravel 4,为了解决这个问题,我在网上查阅了所有可能的样本。但这仍然令人头痛 我只是想避开www.mylaravelsite.com/public/ 并将根目录设置为www.mylaravelsite.com 现在我不想避免安全问题,因此我了解到。htaccess将是最好的方法 朋友们,有什么解决办法吗 &提前感谢互动 将您的web目录指向public/。如果您使用的是apache,这将起作用: <VirtualHost *:80> DocumentRoot /var/www.mylarav

为了解决这个问题,我在网上查阅了所有可能的样本。但这仍然令人头痛

我只是想避开
www.mylaravelsite.com/public/
并将根目录设置为
www.mylaravelsite.com

现在我不想避免安全问题,因此我了解到
。htaccess
将是最好的方法

朋友们,有什么解决办法吗


&提前感谢互动

将您的web目录指向
public/
。如果您使用的是apache,这将起作用:

<VirtualHost *:80>
  DocumentRoot /var/www.mylaravelsite.com/public/
  ServerName www.mylaravelsite.com
</VirtualHost>

DocumentRoot/var/www.mylaravelsite.com/public/
服务器名www.mylaravelsite.com

假设您的服务器中有此文件夹结构

.cpanel/
public_html/
public_ftp/
..
laravel文件夹结构是

app/
bootstrap/
public/
vendor/
composer.json
artisan
..
您可以在服务器上与
public\u html
public\u ftp
文件夹内联创建文件夹名mylaravelsite,并将整个laravel应用程序(公用文件夹除外)复制到该文件夹中,因为您将在
public\u html
上粘贴它的所有内容,因此您现在有:

.cpanel/
public_html/
public_html/packages
public_html/vendor
public_html/index.php
public_html/.htaccess
...
public_ftp/
mylaravelsite/
mylaravelsite/app
mylaravelsite/bootstrap
...
public\u html/index.php上更改以下行:

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

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

另外,不要忘记更改
/mylaravelsite/bootstrap/path.php
公共路径,您可能会使用它

'public' => __DIR__.'/../public',


您的站点应该正在运行。

听起来您缺少的信息是:

文档根 这也称为“web根”。Apache特别称之为-点击该链接以获得官方解释

基本上,它所做的是设置服务器从哪个目录提取文件。在Laravel中,文档根目录应该是
public
文件夹

将DocumentRoot设置为
public
意味着转到
http://mylaravelsite.com浏览器中的
实际上将“指向”您想要的
公用
文件夹

在.htaccess文件中(实际上,更可能在中),您可以为站点设置
DocumentRoot

DocumentRoot /path/to/laravel-app/public
你如何设置它取决于你的主机。每个主机都有不同的方式来设置网站,因此我们无法专门为您回答-您应该咨询您的网络主机技术支持。关键的一点是,
public
目录应该是web根目录,而其他所有内容都应该“在web根目录后面”


公平警告tho:一些主机提供商没有给您足够的访问权限来完成这一任务。

这里是解决方案,但不能在实际项目中使用,它只是初学者测试Laravel,我已经用Laravel 5.0测试过它,它是,从公用文件夹中剪切index.php和.htaccess文件,并将其粘贴到根目录中,并将这两行更改为

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

强烈建议在没有测试环境的情况下不要使用上述方法,而应使用虚拟主机。

在根文件夹中创建.htaccess并写入这些行

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

重新启动发动机
重写规则^(.*)$public/$1[L]

对于生产服务器,建议您将域直接指向公用文件夹

您只需更改laravel项目文件中的.env文件即可。如果你的laravel项目在里面

Root/domain/public\u html/laravel/

转到.env文件并进行编辑

您需要编辑应用程序url路径,该路径应为

应用程序URL=

这就是您的项目现在将运行的原因。如果你的laravel文件是公共html,那么你的应用程序url必须是这样的

应用程序URL=


谢谢

只要在Laravel根目录上添加.htaccess文件,如果它不存在,就在其中添加以下行,就是这样

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

重新启动发动机
重写规则^(.*)$public/$1[L]
用于流明 假设您有一个文件夹路径,如:/var/www/project/microservice(lumensrc)

/var/www=>localhost的文档根目录/

您想要的目标: localhost/project/microservice[/foo…]=>localhost/project/microservice/public/foo

我通过.htaccess(放置在/project文件夹中)执行此操作,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/public/.*
RewriteCond %{REQUEST_URI} ^(/[^/]+/[^/]+/).*
RewriteRule ^[^/]+(.*)$ %1public$1 [L,R=301,P]

在laravel项目的根目录中创建.htacess文件,并将此代码放入

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

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

选项-多视图
重新启动发动机
RewriteCond%{REQUEST_FILENAME}-d[或]
RewriteCond%{REQUEST_FILENAME}-f
重写规则^^$1[N]
重写条件%{REQUEST\u URI}(\.\w+$)[NC]
重写规则^(.*)$public/$1
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^server.php

感谢您的友好回复,兄弟。我想把它上传到web服务器上,在这种情况下我应该怎么做?你必须更改你的apache配置,这是你不能更改的,因为你是在一个webhosting软件包而不是虚拟服务器上托管的。兄弟,我已经按照你的指示做了所有事情,它显示的是404页。我该怎么办?我已经检查了你的网站:,你已经成功安装了laravel。我也注意到你有路线错误。指定默认根目录
(/)
。请参阅文档:谢谢兄弟,我在使用php版本时遇到了问题,因为WebHosing不直接支持5.3或更高版本。兄弟,那是我网站的旧地址,请在我的新应用程序alpha测试上创建一个帐户。感谢帮助:)这是laravel 4或4.2的解决方案,因为我在根目录中找不到/mylaravelsite/bootstrap/paths.php,并且我使用的是laravel 5.2。请给我5+的解决方案,因为我在使用最新版本时遇到了一些困难。这对我很有效。只需将
.htaccess
index.php
文件从公共目录移动到根目录,并更改引导路径。不,不,不。不要这样做。Laravel将文档根放在子目录中的原因是,您不必向公众公开代码。注意:D使用此链接可获得更好的结果。我的osx开发环境要求在“public/$1”前面加一个前导斜杠。谢谢,您的回答对我帮助很大,我正在搜索此答案
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/public/.*
RewriteCond %{REQUEST_URI} ^(/[^/]+/[^/]+/).*
RewriteRule ^[^/]+(.*)$ %1public$1 [L,R=301,P]
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php