Symfony 4 + Apache 2.4 + mod_rewrite不能正常工作

时间:2018-04-05 04:17:39

标签: php .htaccess symfony mod-rewrite apache2.4

我做错了什么?

这是我在/etc/apache2/sites-enabled/hello-world.conf上的配置

<VirtualHost *:80>
    ServerName hello-world
    DocumentRoot "/home/carlos/dev/github/hello-world/public"

<Directory "/home/carlos/dev/github/hello-world/public">
    AllowOverride None
    Order Allow,Deny
    Allow from All

    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
</Directory>

# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/project>
#     Options FollowSymlinks
# </Directory>

# optionally disable the RewriteEngine for the asset directories
# which will allow apache to simply reply with a 404 when files are
# not found instead of passing the request into the full symfony stack
<Directory /var/www/project/public/bundles>
    <IfModule mod_rewrite.c>
        RewriteEngine Off
    </IfModule>
</Directory>

    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined
</VirtualHost>

当我尝试访问http://hello-world/index.php/lucky/number时,一切顺利。

但是http://hello-world/lucky/number我得到了404 Not Found。

404错误是由于我配置了两个VirtualHosts。一个在 /etc/apache2/sites-enabled/000-default.conf ,另一个在 /etc/apache2/sites-enabled/hello-world.conf 中。我在 000-default.conf 中删除了它,现在我收到了“500内部服务器错误”。我改变了这句话:

<Directory "/home/carlos/dev/github/hello-world/public"> 
# AllowOverride None 
# Order Allow,Deny 
Require all granted 
# Allow from All – 

......但我仍然得到了500。

在/var/log/apache2/project_error.log上有这样的消息:

[Thu Apr 05 19:56:25.819680 2018] [core:error] [pid 4277] [client 127.0.0.1:38800] AH00125: Request exceeded the limit of 10 subrequest nesting levels due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

4 个答案:

答案 0 :(得分:3)

这可能是由于Apache 2.4.18之前版本中的错误所致。

在首页上调用Apache后,FallbackResource出现一个Apache错误,导致Apache挂起。

可以在以下位置找到Apache错误的详细信息:https://bz.apache.org/bugzilla/show_bug.cgi?id=58292

I've added a PR to update the Symfony docs

答案 1 :(得分:2)

好的,我终于得到了:

这是一个错误的配置:

    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        # RewriteCond %{REQUEST_FILENAME} !-f
        # RewriteRule ^(.*)$ index.php [QSA,L]
        FallbackResource "index.php"
    </IfModule>

我关注的是这里所说的内容:https://httpd.apache.org/docs/2.4/rewrite/remapping.html

但是后来我试着没有这个FallbackResource,回到Symfony文档给我的东西,用这个:

    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    #       FallbackResource "index.php"
    </IfModule>

现在它正在运作。

谢谢大家

答案 2 :(得分:0)

如果您使用Linux:

$ [sudo] a2enmod rewrite

答案 3 :(得分:0)

如果您使用的是apache 2.4,则已启用mod_rewrite,并在虚拟主机错误日志文件中获取如下内容:

  

[Thu Apr 05 15:08:55.619587 2018] [authz_core:error] [pid 2382] [client 10.0.1.1:51436] AH01630:客户端被服务器配置拒绝:/ vagrant / public /

然后更新您的虚拟主机并替换:

  

订单允许,拒绝

     

全部允许

  

要求全部授予

还要确保将/ var / www / project / public / bundles更新到您的实际目录。