我正在浏览互联网上所有可能的样本来解决这个问题。还是很头疼。
我只是想避免“公共”,www.mylaravelsite.com/public/
让它像www.mylaravelsite.com
根目录一样。
现在我不想回避安全问题,所以我学会了.htaccess
会是最好的方法。
有解决的朋友吗?
并提前感谢您的互动!
假设您的服务器中有此文件夹结构
.cpanel/
public_html/
public_ftp/
..
而laravel文件夹结构是
app/
bootstrap/
public/
vendor/
composer.json
artisan
..
你可以在你的服务器上创建一个名为 mylaravelsite 的文件夹,并与文件夹内联,public_html
并将public_ftp
除 public 文件夹之外的整个 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',
您的网站应该正在运行。
在根文件夹中创建 .htaccess 并写下这些行
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
对于生产服务器,建议您将域直接指向公用文件夹
听起来您缺少的信息是:
这也称为“网络根”。Apache 专门将其称为DocumentRoot - 单击该链接以获取官方解释。
基本上它所做的是设置服务器从哪个目录中提取文件。在 Laravel 中,文档根目录应该是public
文件夹。
将 DocumentRoot 设置为public
意味着进入http://mylaravelsite.com
浏览器实际上将根据需要“指向”public
文件夹。
在 .htaccess 文件中(实际上,更有可能在虚拟主机配置中),您可以DocumentRoot
为您的站点设置:
DocumentRoot /path/to/laravel-app/public
如何设置取决于您的主机。每个主机都有不同的网站设置方式,因此我们无法专门为您回答 - 您应该咨询您的网络主机技术支持。关键是该public
目录应该是 Web 根目录,而其他所有内容都应该在“Web 根目录之后”。
公平警告寿:一些托管服务提供商没有为您提供足够的访问权限来实现这一目标。
如果它不存在,只需在 Laravel 根目录上添加 .htaccess 文件并在其中添加以下行,就是这样,
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
将您的 Web 目录指向public/
. 如果您使用的是 apache,这将起作用:
<VirtualHost *:80>
DocumentRoot /var/www.mylaravelsite.com/public/
ServerName www.mylaravelsite.com
</VirtualHost>
在您的 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
这是解决方案,但不能在实际项目中这样做,它只是为了测试 Laravel 的初学者,我已经用 laravel 5.0 对其进行了测试,它是从公共文件夹中剪切 index.php 和 .htaccess 文件并将其粘贴到根目录并将这两行更改为
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
强烈建议不要在没有测试环境的情况下使用上述方法,而应使用虚拟主机。
您只需要更改 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
谢谢
假设您有一个文件夹路径,例如:/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]