我正在互联网上查看所有可能的示例来解决这个问题。还是很头疼。
我只是想避开
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
文件夹内联,并将除公共文件夹之外的整个 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>
在 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
或者将此代码添加到您的 .htaccess 中
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
将您的网络目录指向
public/
。如果您使用 apache,这将起作用:
<VirtualHost *:80>
DocumentRoot /var/www.mylaravelsite.com/public/
ServerName www.mylaravelsite.com
</VirtualHost>
这是解决方案,但不能在实际项目中这样做,这只是为了测试 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/的文档根目录/
您想要的目标: 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]
在服务器上(Apache) 在根文件夹中创建.htaccess并写入以下行
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
更多地了解Gist
关于地方发展 您可以通过将以下行添加到 apache vhost 配置文件来创建虚拟主机。 一般来说,你可以在C:\xampp pach中找到这个文件