避开 laravel 的公用文件夹,直接在 web 服务器中打开根目录
Posted
技术标签:
【中文标题】避开 laravel 的公用文件夹,直接在 web 服务器中打开根目录【英文标题】:Avoid public folder of laravel and open directly the root in web server 【发布时间】:2013-11-24 05:49:32 【问题描述】:我正在浏览互联网上所有可能的示例来解决这个问题。还是很头疼。
我只是想避免www.mylaravelsite.com/public/
中的“公众”
并将根目录设为www.mylaravelsite.com
。
现在我不想避免安全问题,所以我了解到.htaccess
将是最好的方法。
有解决的朋友吗?
并提前感谢您的互动!
【问题讨论】:
youtube.com/watch?v=ybJYyU5FPv4 看这个:D ***.com/questions/20547891/… 使用此链接以获得更好的结果。 试试我的解决方案它会在任何地方工作。检查链接***.com/questions/25222509/… 【参考方案1】:在你的 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
【讨论】:
好。再做一点改动也会删除 index.php。 谢谢伙计,这是使我的项目工作的唯一 .htaccess!【参考方案2】:流明
假设您有一个文件夹路径,例如:/var/www/project/microservice(lumen src)
/var/www => 本地主机的文档根目录/
你想要的目标: 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]
【讨论】:
【参考方案3】:如果 .htaccess 文件不存在,只需在 Laravel 根目录上添加它,然后在其中添加以下行,就是这样,
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
【讨论】:
最简单的解决方案。谢谢 与 Anik 给出的建议相同。【参考方案4】:这是解决方案,但不能在实际项目中这样做,它只是为了测试 Laravel 的初学者,我已经用 laravel 5.0 对其进行了测试,它是从公共文件夹中剪切 index.php 和 .htaccess 文件并粘贴它在根目录中并将这两行更改为
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
强烈建议不要在没有测试环境的情况下使用上述方法,而应使用虚拟主机。
【讨论】:
这对我有用。只需将.htaccess
和 index.php
文件从公共目录移动到根目录并更改引导路径。
不,不,不。不要那样做。 Laravel 将文档根放在子目录中的原因是您不必将代码暴露给公众。【参考方案5】:
您只需要更改 laravel 项目文件中的 .env 文件即可。如果你的 laravel 项目在
根/域/public_html/laravel/
转到 .env 文件并编辑
您需要编辑应用程序 url 路径,该路径应为
APP_URL=http://www.domainname.com/laravel/public/
您的项目现在就可以运行了。如果你的 laravel 文件在 public_html 中,那么你的应用 url 必须是这样的
APP_URL=http://www.domainname.com
谢谢
【讨论】:
【参考方案6】:在根文件夹中创建 .htaccess 并写入这些行
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
对于生产服务器,建议您将域直接指向公用文件夹
【讨论】:
我的 osx 开发环境需要在 "public/$1" 前面加上斜杠 谢谢你的回答对我帮助很大,我找了两天这个答案【参考方案7】:假设您的服务器中有这个文件夹结构
.cpanel/
public_html/
public_ftp/
..
而laravel文件夹结构是
app/
bootstrap/
public/
vendor/
composer.json
artisan
..
你可以在你的服务器上创建一个名为 mylaravelsite 的文件夹,与public_html
和public_ftp
文件夹内联,然后将除公共文件夹之外的整个 laravel 应用程序复制到它,因为你会将它的所有内容粘贴到 public_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_html/index.php
上更改以下行:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';
到
require __DIR__.'/../mylaravelsite/bootstrap/autoload.php';
$app = require_once __DIR__.'/../mylaravelsite/bootstrap/start.php';
别忘了更改/mylaravelsite/bootstrap/paths.php
公共路径,你可以使用它。
'public' => __DIR__.'/../public',
到
'public' => __DIR__.'/../../public_html',
您的网站应该正在运行。
【讨论】:
兄弟我已经按照你的指示做了一切,它显示的是 404 页面。我该怎么办? 我检查了你的网站:dolovers.com/sagir,你已经成功安装了 laravel。我还注意到您有路线错误。指定您的默认根(/)
。请参阅文档:Laravel Routing
谢谢兄弟,我在使用 php 版本时遇到了问题,因为 web hosing 不直接支持 5.3 或更高版本。兄弟,那是我网站的旧地址,请在我对这个应用程序的新 alpha 测试中创建一个帐户,dolovers.com/auth/signup。感谢您的帮助:)
这是 laravel 4 或 4.2 的解决方案,因为我在根目录中找不到 /mylaravelsite/bootstrap/paths.php 并且我使用的是 laravel 5.2
你能给出 5+ 的解决方案吗,因为我在使用最新版本时遇到了一些困难。【参考方案8】:
听起来您缺少的信息是:
文档根目录
这也称为“网络根”。 Apache 专门将其称为DocumentRoot - 点击该链接查看官方解释。
基本上它所做的是设置服务器从哪个目录中提取文件。在 Laravel 中,文档根目录应该是 public
文件夹。
将 DocumentRoot 设置为 public
意味着在浏览器中转到 http://mylaravelsite.com
实际上会根据需要“指向”public
文件夹。
在 .htaccess 文件中(实际上,更有可能在 virtual host configuration 中),您可以为您的站点设置 DocumentRoot
:
DocumentRoot /path/to/laravel-app/public
如何设置取决于您的主机。每个主机都有不同的网站设置方式,因此我们无法专门为您回答 - 您应该咨询您的网络主机技术支持。关键是public
目录应该是网络根目录,而其他一切都应该是“在网络根目录之后”。
公平警告:一些托管服务提供商没有为您提供足够的访问权限来实现这一目标。
【讨论】:
【参考方案9】:将您的网络目录指向public/
。如果您使用的是 apache,这将起作用:
<VirtualHost *:80>
DocumentRoot /var/www.mylaravelsite.com/public/
ServerName www.mylaravelsite.com
</VirtualHost>
【讨论】:
谢谢你的热情回复兄弟。我想把它上传到网络服务器上,这种情况我该怎么办? 您必须更改您不能更改的 apache 配置,因为您托管在网络托管包而不是虚拟服务器上。以上是关于避开 laravel 的公用文件夹,直接在 web 服务器中打开根目录的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel @Apache2 Server Ubuntu 14.04 LTS 中将 Root 设置为公用文件夹