laravel 在此服务器上找不到请求的 url

问题描述 投票:0回答:14

我有一个 Ubuntu 14.04 内核。我正在这个服务器上安装我的 Laravel 应用程序。 安装后,我尝试将根目录设置为public。

sudo nano /etc/apache2/sites-available/000-default.conf

我在文件中只有这些选项

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port t$
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/public/

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

我已将文档根目录更改为

DocumentRoot /var/www/html/public/

现在,当我尝试访问我的 Laravel 应用程序时,通过

123.xxx.xxx.xxx/
它显示主页并且运行良好。它也获取所有 GET 变量。例如:
123.xxx.xxx.xxx?type=wefwef

但是当我转到其他链接时,例如

123.xxx.xxx.xxx/login
,它给了我一个错误

Not Found

The requested URL /login/ was not found on this server.

Apache/2.4.7 (Ubuntu) Server at 104.236.234.85 Port 80

我的 routes.php 在本地主机上运行良好。但不是在这个服务器上。请帮我。

apache ubuntu laravel laravel-4
14个回答
192
投票

这看起来你必须通过将它添加到你的虚拟主机来启用

.htaccess

<Directory /var/www/html/public/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

如果这不起作用,请确保您启用了mod_rewrite

修改后不要忘记重启apache! (

service apache2 restart
)


130
投票

我通过执行以下操作解决了问题: 检查你的 apache 中是否有一个名为 rewrite.load 的模块:

cd /etc/apache2/mods-enabled/

如果不存在执行以下摘录:

sudo a2enmod rewrite

否则,更改 Apache 配置文件以统一使用“友好 URL”。

sudo nano /etc/apache2/apache2.conf

在编辑器中找到如下代码:

<Directory /var/www/> 
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted
</Directory> 

更改为:

<Directory /var/www/> 
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

之后通过以下方式重新启动 Apache 服务器:

sudo /etc/init.d/apache2 restart

29
投票

首先启用

a2enmod rewrite
接下来重启apache

/etc/init.d/apache2 restart

点击这里回答这些问题


12
投票

或者,您可以替换 .htaccess 文件中的所有内容

Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

在这里查看文档。 https://laravel.com/docs/5.8/installation#web-server-configuration


7
投票

对于 ubunutu 18.04 在一个流浪者盒子里......这就是帮助我

  1. 确保 www-data 对 .htaccess 文件有权限

     
        sudo chown www-data.www-data .htaccess
      
    
  2. 编辑 apache2 conf 以允许符号链接等

     
        sudo nano /etc/apache2/apache2.conf
      
    

    将此添加到文件

<Directory /var/www/html/>
  Options Indexes FollowSymLinks
  AllowOverride all
  Require all granted
</Directory>

  1. 重启你的apache2服务器

    sudo service apache2 restart

我希望这对某人有帮助。


2
投票

如果您仍然遇到问题的一些变化,除了所有答案之外,编辑

.env
文件并将
APP_URL
设置为您的域名,如下所示:

 APP_URL=similar_to_my_avatar_link 

0
投票

在 httpd.conf 文件中你需要删除#

#LoadModule rewrite_module modules/mod_rewrite.so

删除#行后将如下所示:

LoadModule rewrite_module modules/mod_rewrite.so

Apache 重启


0
投票

太晚了..但为了利益 你可以编辑你的 .htaccess 文件 评论这一行

  #  RewriteRule ^ index.php [L]

0
投票

确保您启用了mod_rewrite

restart apache

并清除浏览器的cookies,以便在.htaccess

再次阅读

0
投票

我在我的本地机器(Windows 11)上遇到了类似的问题,几个小时后,我发现大多数应用程序现在重定向到 HTTPS,并且 XAMPP 在创建类似于非 ssl 的安全虚拟主机后对安全虚拟主机有不同的配置,我解决了这个问题。


-1
投票

我在

cPanel
中遇到了同样的问题,我解决了我的问题以在这些行下面的
.htaccess
文件中添加

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

-1
投票

将以下内容添加到公用文件夹中的 .htaccess。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

-1
投票

在 httpd.conf 中当前版本的 Apache 中有几行:

DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
   ...
</Directory>

而不是前面提到的:

DocumentRoot /var/www/
<Directory /var/www/
   ...
</Directory>

这取决于你的服务器的目录结构,但默认情况下我猜它可能是这样的。

按照建议,在 Directory 标签内,我更改了如下选项:

    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

默认情况下是

AllowOverride none
。它有帮助。

当然,同一个文件中的

LoadModule rewrite_module modules/mod_rewrite.so
应该打开。


-1
投票

对于 ubuntu!

你需要编辑这个文件:

nano /etc/apache2/conf-available/apache2.conf

改变这个:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

至:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

然后只是:

sudo systemctl reload apache2

© www.soinside.com 2019 - 2024. All rights reserved.