当我加载非root用户的页面时,如果没有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>
和我公开的.htacces:
<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运行网站localy时,一切正常。 几个小时我现在正在尝试,但我无法解决它或发现任何错误(日志是空的)或任何我尚未尝试的解决方案。
修改
我在数字海洋VPS上使用Ubuntu Ubuntu 14.04 x64。我试着再打开和关闭(如建议的那样)。 PHP版本5.5.9-1ubuntu4.9。我按照this教程配置了所有内容(除了可怕的部分)。我更改了apache日志的位置,并在给定目录上创建了一个文件error.log,但没有错误。
我目前的appache配置是:(我已经三次检查了域名所在的白色部分)。
当我运行apache2ctl -t D DUMP_VHOSTS时,我得到了
这对我来说很好,也尝试禁用默认配置,但它没有帮助。
注意:我已经用mydomain.com替换了我的真实域名,实际上我在这些地方使用了我的真实域名。
思考我如何确定编辑的conf文件是域名所使用的?
答案 0 :(得分:12)
这是Laravel 5的正确的备用htaccess规则,建议在默认设置不起作用时使用
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
我认为Options +FollowSymLinks
起着重要作用,因为DirectotyIndex
就像一个符号链接。
同时检查/app/config/app.php以确保您没有设置Config(&#39; app.url&#39;)以包含index.php。
如果您在子目录中安装了laravel,请参阅: How can I remove "public/index.php" in the url generated laravel?
答案 1 :(得分:8)
您是否尝试将其全部关闭(关闭),然后再将其打开?
如果一切如你所说,它应该有效。我会尝试重新启动以查看它是否会发生任何变化。
如果没有,请使用您正在使用的操作系统进行更新。
答案 2 :(得分:6)
我最终删除了完整的conf文件,然后从正在工作的文件中再次复制。我从laravel中取出了默认的.htaccess,它起作用了。不幸的是,我仍然不知道出了什么问题。当前的conf文件看起来像
<Directory /var/www/mydomain.com>
AllowOverride ALL
DirectoryIndex index.php
</Directory>
我的.htaccess在/ public
<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>
答案 3 :(得分:4)
我今天几乎遇到了同样的问题,@ dasper也帮助了我。我也在使用数字海洋Ubuntu 14.04,我必须运行命令a2enmod rewrite
然后重新加载apache2。似乎即使重写出现,它实际上也不是。
答案 4 :(得分:3)
首先,确保启用了mode_rewrite。我相信你可能已经做到了这一点,但我想确保没有错过。
接下来,查看您运行的apache版本,因为语法已在2.2和2.4之间更改。这不应该是一个大问题,并且非常怀疑这是罪魁祸首,但可以在将来为您节省麻烦
接下来,尝试将重写条件放在vhost信息中而不是htaccess文件中。这有助于提高性能,并在重新启动apache时给你一个控制台警告/错误,其中htaccess错误可能会被压制。
<directory /var/www/mydomain.com>
Options -MultiViews
AllowOverride ALL
RewriteEngine On
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</directory>
除此之外,如果没有来自服务器的更多日志记录或信息,我将会感到茫然。您还可以将CustomLog
添加到vhost中,并报告服务器处理的所有请求。
答案 5 :(得分:3)
问题可能在于虚拟主机配置和/或放错位置的 .htaccess 文件。
确保您的 .htaccess 文件位于 public / 文件夹中,并且 DocumentRoot 设置为该公共/文件夹。
而且,&lt;目录&gt; 指令不是控制您的虚拟主机,而是控制文件夹本身以及如何在服务器上访问(或无法访问)。要更改虚拟主机的配置,请在&lt;内部更改VirtualHost&gt; 指令。
以下是虚拟主机配置的示例:
<VirtualHost *:80>
ServerName mydomain.com
ServerAlias www.mydomain.com
DocumentRoot "/var/www/mydomain.com/public"
DirectoryIndex index.php
</VirtualHost>
这是默认的Laravel Apache配置:
<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>
这是另一种选择:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
答案 6 :(得分:2)
尝试将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/ public目录复制到Laravel根文件夹。
找到解决方案here
答案 7 :(得分:2)
我相信你的目录路径是错误的。最后需要/public
,因为Laravel将该目录视为Web根目录。试试这个:
<directory /var/www/mydomain.com/public>
DirectoryIndex index.php
AllowOverride ALL
</directory>
但更好的解决方案是将.htaccess
文件的内容放在虚拟主机中。像这样:
<VirtualHost *:80>
DocumentRoot "/var/www/mydomain.com/public"
ServerName mydomain.com
ServerAlias *.mydomain.com
<Directory "/var/www/mydomain.com/public">
# Ignore the .htaccess file in this directory
AllowOverride None
# Make pretty URLs
<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>
</Directory>
</VirtualHost>
此外,您应该通过运行来确保您的配置文件已加载:
apache2ctl -t -D DUMP_VHOSTS
这将打印所有已加载的虚拟主机的列表。如果您的列表不在该列表中,请确保通过运行启用它:
a2ensite [name_of_your_config_file]
然后使用以下命令重启apache:
service apache2 reload
答案 8 :(得分:2)
还有一点需要注意:不要忘记编辑/etc/hosts
并添加127.0.0.2 yourdomain.com