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