【问题标题】:Laravel 5.4 - Routes not workingLaravel 5.4 - 路线不起作用
【发布时间】:2017-07-27 18:24:06
【问题描述】:

我已经设置了一个全新的 ubuntu mini 安装并安装了 apache2 和 PHP。 (也用最新的稳定 ubuntu 试过) 我还安装了一些模块,其中包括laravel installation documentation 中列出的模块:

OpenSSL PHP Extension
PDO PHP Extension
Tokenizer PHP Extension
Mbstring PHP Extension
XML PHP Extension

我也安装了:

libapache2-mod-phpgitcurl、php-curl

sudo apt-get install libapache2-mod-php
sudo apt-get install curl
sudo apt-get install php-curl
sudo apt-get install git

现在我从 Windows 的 apache 服务器复制了整个 laravel 项目。 然后我执行了

chmod 775 -R *

chown www-data:www-data -R *

但是,路由不起作用。

例如http://192.168.2.100/selenium/public/start

应该显示我的起始页,而不是我得到:

未找到:在此服务器上未找到请求的 URL /selenium/public/start。`

于是我研究并在stackoverflow上找到了this

来自答案:

Try to navigate to your expected route prepend it with /index.php/, in
your case: http://localhost/laravel/index.php/users. 
If it works (no 404) then you problem is with the Rewrite Module configuration of
Apache HTTP, you should follow the next steps.

所以我尝试像建议的那样调用我的页面:

http://192.168.2.100/selenium/public/index.php/start

那行得通。所以Rewrite Module Configuration有问题。

他/她建议在public/.htaccessRewriteEngine On下添加RewriteBase /directory/

所以我把我的public/.htaccess 改成了这个并重启了apache2:

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

    RewriteEngine On
    RewriteBase /selenium/

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

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

    # Handle Authorization Header

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

但是,这些路线仍然无法正常工作。 我还能尝试什么?

系统信息

Apache 版本:

Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:32:47

PHP 版本:

PHP 7.0.16-4+deb.sury.org~trusty+1 (cli) (built: Mar  2 2017 13:50:00) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.16-4+deb.sury.org~trusty+1, Copyright (c) 1999-2017, by Zend Technologies

Linux 版本:

Linux linux 3.13.0-110-generic #157-Ubuntu SMP Mon Feb 20 11:55:25 UTC 2017 i686 i686 i686 GNU/Linux

【问题讨论】:

  • 这个“未找到”消息是来自 Apache 还是来自 Laravel?如果是Apache的消息,看我对stackoverflow.com/q/42610062/1741542的回复
  • 我建议查看是否启用了 mod 重写以及您的 apache 设置是否允许在该文件夹中使用 htaccess。(检查 AllowOverride 指令)

标签: php linux apache .htaccess


【解决方案1】:

很多时候,如果它是全新安装的 Ubuntu 并且您安装了 apache,默认情况下不会启用 rewrite 模块。 在终端中运行以下命令

sudo a2enmod rewrite

sudo service apache2 restart  

现在,由于启用了重写模块,您的 laravel 项目公用文件夹中的 .htaccess 将被读取,并且路由将按预期工作。

我不必更改 laravel 中默认 .htaccess 文件中的任何行。
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 2017-11-08
    • 2018-03-25
    • 2017-08-09
    • 2017-10-02
    • 2013-05-03
    • 2014-09-08
    相关资源
    最近更新 更多