此问题已在此处有答案:
How to make public folder as root in Laravel?(3个答案)
5天前关闭。
这篇文章是编辑并提交审查5天前.
当我加载非根目录的页面时,如果在路由之前没有index.php,页面将无法加载。我得到的错误:
Not Found
The requested URL /login was not found on this server.
Apache/2.4.7 (Ubuntu) Server at mydomain.com Port 80
首先,我有一个虚拟主机文件,其中包含:
//also tried adding DirectoryIndex here before <directory>
<directory /var/www/mydomain.com>
DirectoryIndex index.php
AllowOverride ALL
</directory>
and a .htacces in my public with:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我有另一个域与相同的.htaccess和appache配置在同一服务器上,它工作正常。我重新启动了Apache。如果我在index.php/route页面上使用phpinfo,我会在Loaded Modules中看到:
mod_rewrite mod_setenvif
在本地运行xampp网站时,一切正常。几个小时,我现在尝试,但我不能修复它或找到任何错误(日志是空的)或任何解决方案,我还没有尝试过。
编辑:
我在一个数字海洋VPS上使用Ubuntu Ubuntu 14.04 x64。而且我试着再次打开和关闭它(按照建议)。PHP版本5.5.9-1ubuntu4.9。我按照this教程配置了所有内容(除了directy部分)。我改变了apache日志的位置,在给定的目录下创建了一个文件error.log,但其中没有错误。
我现在的配置是:x1c 0d1x(我已经三次检查了域名的白色部分)。
当我运行apache 2ctl-t D DUMP_VHOSTS时,我得到
这看起来很好,我也尝试禁用默认配置,但它没有帮助。
- 注意:我已经用www.example.com替换了我的真实的域名mydomain.com,实际上我在这些地方使用我的真实域名。
Thought我如何确定正在编辑的conf文件是域正在使用的文件?
**注意标记为重复的问题没有解决这个问题的问题和答案,唯一相似的是它是关于htaccess文件的。
9条答案
按热度按时间bis0qfac1#
这是Laravel 5的正确替代htaccess规则,建议在默认值不起作用时使用:
我相信
Options +FollowSymLinks
扮演了一个重要的角色,因为DirectotyIndex
就像一个符号链接。同时检查/app/config/app. php以确保您没有将Config('app. url')设置为包含index.php。
如果你在子目录中安装了laravel,请看下面的代码:How can I remove "public/index.php" in the url generated laravel?
rbl8hiat2#
你有没有试过把它全部关掉(关机),然后再打开它?
如果一切都像你说的那样,它应该工作。我会尝试重新启动,看看它是否会改变什么。
如果没有,请更新您使用的操作系统。
cetgtptt3#
我最终删除了完整的conf文件,并再次复制它从一个工作。我从laravel获取了default .htaccess,它工作了。不幸的是,我仍然不知道是什么错了。当前的conf文件如下所示
My .htaccess in /public
4urapxun4#
我今天遇到了几乎完全相同的问题,@dasper也帮了我。我也在使用数字海洋Ubuntu 14.04,我必须运行
a2enmod rewrite
命令,然后重新加载apache 2。看来,即使重写 * 似乎 * 是对的,它实际上不是。fcg9iug35#
首先,确保启用了mode_rewrite。我相信你可能已经这样做了,但我想确保没有什么是错过了。
接下来,看看你运行的是什么版本的Apache,因为语法在2.2和2.4之间发生了变化。这不应该是一个大问题,并高度怀疑这是罪魁祸首,但可以保存您的麻烦,在未来
接下来,尝试将重写条件放在vhost信息而不是htaccess文件中。这对性能有一点帮助,并且在重新启动apache时给予你一个控制台warn/err,这样htaccess错误就可以被抑制了。
超过这一点,我将在亏损没有一些更多的日志或信息从服务器。您还可以将
CustomLog
添加到vhost中,并报告服务器处理的所有请求。23c0lvtd6#
问题可能与您的虚拟主机配置和/或**.htaccess文件放错位置有关。
确保您的.htaccess文件位于public/文件夹中,并且DocumentRoot设置为该public/文件夹。
而且,< Directory> 指令并不控制虚拟主机,而是控制文件夹本身以及如何在服务器上访问它。要更改虚拟主机的配置,请在**< VirtualHost>**指令中执行此操作。
以下是虚拟主机配置的示例:
以下是默认的Laravel Apache配置:
这里有一个替代方案:
x7yiwoj47#
尝试将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/public目录复制到Laravel根文件夹。
找到的解决方案here
vawmfj5a8#
我认为您的目录路径是错误的。最后需要
/public
,因为Laravel将该目录视为Web根目录。试试这个:但更好的解决方案是将
.htaccess
文件的内容放在虚拟主机中。像这样:此外,您应该确保通过运行以下命令加载配置文件:
apache2ctl -t -D DUMP_VHOSTS
这将打印所有已加载的vhost的列表。如果您的不在该列表中,请运行以下命令以确保已启用:
a2ensite [name_of_your_config_file]
然后重新启动apache:
service apache2 reload
wn9m85ua9#
还有一点不要忘记编辑
/etc/hosts
并添加127.0.0.2 yourdomain.com