如何从Symfony4路由器中删除index.php?

Mil*_* M. 5 php url routing symfony symfony4

我一直在关注如何配置Web服务器的Symfony 4文档。

https://symfony.com/doc/current/setup/web_server_configuration.html

我的apache 2.4配置中的.conf文件与他们的文档中所述完全相同。我在这里复制了一部分:

<Directory /var/www/project/public>
    AllowOverride None
    Require all granted
    Allow from All

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

转到我的平台,一切正常,但是一旦我转到任何页面,它就会显示404错误。如果我在网址中添加index.php,则效果很好。您能帮我弄清楚发生了什么吗?

例如:当我在http://myplatform.com/上时

我可以在此页面上保存电子邮件地址。如果我访问http://myplatform.com/index.php/saveEmail,它可以工作,但是从我的页面上,我的链接将我重定向到http://myplatform.com/saveEmail,但它不起作用。

如果我转到http://myplatform.com/index.php,则一切正常。

如何从URL中删除index.php?

谢谢!

mah*_*fuz 11

我不知道Symfony。但它应该与所有apache2和php项目一起使用。


首先,您需要做两件事:

  1. 您需要检查是否启用了PHP重写模块。你可以做到phpinfo()。将其写入文件info.php并在浏览器中打开:http://localhost/info.php

    现在搜索mod_rewrite。如果您mod_rewrite在此页面中看到,则表示mod_rewrite已启用。

  2. 如果mod_rewrite未启用,请启用它。我启用了在Ubuntu 18.04的Apache使用此命令:$ sudo a2enmod rewrite。然后重启apache2$ systemctl restart apache2

如果mod_rewrite启用,则其他配置将起作用。


  1. 然后添加AllowOverride All.conf文件中:

    <Directory /var/www/project/public>
        AllowOverride All
    </Directory>
    
    Run Code Online (Sandbox Code Playgroud)

  1. 然后.htaccess在您的项目根目录中添加文件。

    <IfModule mod_rewrite.c>
        RewriteEngine On
    
        # Send would-be 404 requests to Craft
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule (.+) index.php?p=$1 [QSA,L]
    </IfModule>
    
    Run Code Online (Sandbox Code Playgroud)

注意:尝试.htaccess在中/var/www/project/.htaccess或中添加文件/var/www/project/public/.htaccess。不知道什么会工作。

  • enable mod_rewrite 对我来说是完美的。比 (2认同)

Flo*_*ann 5

这个 apache 配置不包括对每个请求的 index.php 重定向。您有 2 个选择:

• 在同一页面上,有一个配置在这句话之后包含此重定向:“使用以下优化配置来禁用 .htaccess 支持并提高 Web 服务器性能:”

• 如果您想使用 .htaccess 来处理此重定向,那么您只需执行composer require apache-pack. 此命令将在您的公共目录中安装 .htaccess。