【问题标题】:Laravel and Apache2 : unable to correctly use redirectsLaravel 和 Apache2:无法正确使用重定向
【发布时间】:2016-12-05 11:30:40
【问题描述】:

我对 Laravel 有疑问。在运行 Debian 8.5、名为 fmbsrv130 的 Intranet Apache 2.4.10 Web 服务器上,我想安装一个名为 sentinelle 的 Laravel 项目。

所以 Laravel 安装好了,我可以用http://fmbsrv130/sentinelle/ 访问它(我有 Laravel 的欢迎页面)。但是,如果我尝试转到http://fmbsrv130/sentinelle/1(不存在),我有来自 Apache2 的 404 表示“在此服务器上找不到请求的 URL /home/webadmin/sentinelle/public/index.php”。如果我尝试访问 http://fmbsrv130/sentinelle/index.php/1 我有来自 Laravel 的 404:“抱歉,找不到您要查找的页面。 RouteCollection.php 第 161 行中的 1/1 NotFoundHttpException:..."

在 Apache 中正确启用了 rewrite_mod。

这里是 Apache 的配置文件(站点可用的 000-default.conf):

Alias "/sentinelle" "/home/webadmin/sentinelle/public/"

    <Directory "/home/webadmin/sentinelle/public/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

为了测试,如果我尝试使用

从 Laravel 的公共文件夹中修改 .htaccess 文件
RewriteEngine On
RewriteRule ^.*$ htaccess_tester.php

(htaccess_tester.php 是一个用于测试 .htaccessfile 内容的文件(在 GitHub 上查看),目前位于公共文件夹中),我有 Apache2 404 错误消息The requested URL /home/webadmin/sentinelle/public/htaccess_tester.php was not found on this server.

这是来自 .htaccess 文件的问题还是来自 Apache2 配置的问题或来自 Laravel 配置的问题或文件访问权限?

【问题讨论】:

  • 新测试:如果我通过设置 DocumentRoot /home/webadmin/sentinelle/public 更改 Apache2 配置一切正常,我可以使用 fmbsrv130fmbsrv130/1 访问 Laravel,显示来自 Laravel 的 404 消息。有什么建议吗?
  • 你在修改conf文件后重启了apache吗?
  • 我当然做到了:)

标签: php laravel apache2


【解决方案1】:

您的 apache2 上是否启用了 mod_rewrite 请确认它应该启用 .htaccess 工作并在您的 .htaccess 文件中添加默认 laravel .htaccess 内容

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

    RewriteEngine On

    # 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>

如果这不起作用,请尝试将您的 index.php 从公共目录中删除并将其放在根目录 /sentinell 并将 .htaccess 修改为 RewriteRule ^ public/index.php [L] 这应该可以解决问题

【讨论】:

  • 是的,我说过 mod_rewrite 已在 Apache 中启用,我知道它可以工作,因为如果我按照评论中的说明更改 DocumentRoot,一切正常。所以现在我从公共文件夹中取出了 index.php,我更新了 .htaccess 并列出了文件夹的内容
【解决方案2】:

好的,最后我通过一些修改找到了解决方案:第一个是将 .htaccess 文件放入公共文件夹:

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

    RewriteEngine On
    RewriteBase /sentinelle/

    # 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>

(添加 RewriteBase /sentinelle/)

第二个是进入 default.conf Apache 文件:

Alias /sentinelle /home/webadmin/sentinelle/public/

<Directory "/home/webadmin/sentinelle/public">
    AllowOverride All
    Order allow,deny
    allow from all
    Require all granted
</Directory>

它解决了本主题中描述的问题,我将打开另一个,因为现在地址中的最后一个“/”有问题:)

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多