如何在没有公用文件夹的根目录下运行laravel


How to run laravel in root directory without the public folder?

我在自己的服务器上运行最新版本的laravel,运行DebianApache2

laravel的内容位于我的域名所指向的/var/www中,但所有功能都通过public目录实现,因此我必须转到http://mydomain.com/public访问任何内容。

我想更改它,以便只访问http://mydomain.com。这可能吗?

我该如何更改?我是否必须将所有内容提升到/var的父级?

到目前为止,我还没有在网上找到任何东西表明这是可能的,或者说这是一个好主意。

这不是您的问题,您需要将虚拟主机指向公用文件夹。

在laravel根目录中添加一个文件,将其命名为.htaccess并将其放入

<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

它肯定会被修复的。

如本文所述,以下内容对我有效:https://stackoverflow.com/a/16569078/3091980

将/public文件夹的所有内容下移一级。然后更新index.php中的include行以指向正确的位置-如果它在一个级别以下,请删除"../".

对不起,我删除了旧答案。。也就是说,如果你将server.php重命名为index,那么它就会工作,但当然不会,因为laarvel并没有加载所有服务。所以您必须将所有公用文件夹文件粘贴到根目录中。并删除"/"来自index.php中的所有位置

找到您的httpd.conf,将DocumentRoot "/var/www"的部分更改为"/var/www/public",并覆盖目录以允许laravel 的.htaccess文件

...
DocumentRoot "/var/www/public"
...
<Directory "/var/www/public">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>