Laravel 5需要index.php使用Apache虚拟主机[重复]

1wnzp6jl  于 2023-06-20  发布在  PHP
关注(0)|答案(9)|浏览(80)

此问题已在此处有答案

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文件的。
bis0qfac

bis0qfac1#

这是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('app. url')设置为包含index.php。
如果你在子目录中安装了laravel,请看下面的代码:How can I remove "public/index.php" in the url generated laravel?

rbl8hiat

rbl8hiat2#

你有没有试过把它全部关掉(关机),然后再打开它?
如果一切都像你说的那样,它应该工作。我会尝试重新启动,看看它是否会改变什么。
如果没有,请更新您使用的操作系统。

cetgtptt

cetgtptt3#

我最终删除了完整的conf文件,并再次复制它从一个工作。我从laravel获取了default .htaccess,它工作了。不幸的是,我仍然不知道是什么错了。当前的conf文件如下所示

<Directory /var/www/mydomain.com>
    AllowOverride ALL
    DirectoryIndex index.php
</Directory>

My .htaccess in /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>
4urapxun

4urapxun4#

我今天遇到了几乎完全相同的问题,@dasper也帮了我。我也在使用数字海洋Ubuntu 14.04,我必须运行a2enmod rewrite命令,然后重新加载apache 2。看来,即使重写 * 似乎 * 是对的,它实际上不是。

fcg9iug3

fcg9iug35#

首先,确保启用了mode_rewrite。我相信你可能已经这样做了,但我想确保没有什么是错过了。
接下来,看看你运行的是什么版本的Apache,因为语法在2.2和2.4之间发生了变化。这不应该是一个大问题,并高度怀疑这是罪魁祸首,但可以保存您的麻烦,在未来
接下来,尝试将重写条件放在vhost信息而不是htaccess文件中。这对性能有一点帮助,并且在重新启动apache时给予你一个控制台warn/err,这样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中,并报告服务器处理的所有请求。

23c0lvtd

23c0lvtd6#

问题可能与您的虚拟主机配置和/或**.htaccess文件放错位置有关。
确保您的
.htaccess文件位于public/文件夹中,并且DocumentRoot设置为该public/文件夹。
而且,
< Directory> 指令并不控制虚拟主机,而是控制文件夹本身以及如何在服务器上访问它。要更改虚拟主机的配置,请在**< VirtualHost>**指令中执行此操作。
以下是虚拟主机配置的示例:

<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]
x7yiwoj4

x7yiwoj47#

尝试将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/public目录复制到Laravel根文件夹。
找到的解决方案here

vawmfj5a

vawmfj5a8#

我认为您的目录路径是错误的。最后需要/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
这将打印所有已加载的vhost的列表。如果您的不在该列表中,请运行以下命令以确保已启用:
a2ensite [name_of_your_config_file]
然后重新启动apache:
service apache2 reload

wn9m85ua

wn9m85ua9#

还有一点不要忘记编辑/etc/hosts并添加127.0.0.2 yourdomain.com

相关问题