Laravel和Apache2:无法正确使用重定向

时间:2016-12-05 11:30:41

标签: php laravel apache2

我和Laravel有问题。在使用Debian 8.5运行的内部网Apache 2.4.10 Web服务器上,名为fmbsrv130,我想安装一个名为sentinelle的Laravel项目。

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

在Apache中正确启用了rewrite_mod。

这是Apache的配置文件(在sites-available中的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配置或文件访问权限的问题?

2 个答案:

答案 0 :(得分:0)

是你的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],这应该可以解决问题

答案 1 :(得分:0)

好的,最后我通过做一些修改找到了解决方案:首先是.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>

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