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

时间:2018-05-31 02:38:24

标签: php symfony url routing 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>

转到我的平台,一切正常,但只要我去任何页面,就会显示404错误。如果我在url中添加index.php它可以正常工作。你能帮我弄清楚发生了什么吗?

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

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

如果我去http://myplatform.com/index.php那么一切正常。

如何从网址中删除index.php?

谢谢!

4 个答案:

答案 0 :(得分:6)

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


首先,您需要做两件事:

  1. 您需要检查是否已启用php rewrite模块。您可以使用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>
    

  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>
    

注意:尝试在.htaccess/var/www/project/.htaccess中添加/var/www/project/public/.htaccess文件。不确定会起作用。

答案 1 :(得分:2)

此apache配置不包括每个请求重定向到index.php。你有两个选择:

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

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

答案 2 :(得分:0)

如果你这样改变它可能会起作用,

AllowOverride All
Order Allow,Deny

答案 3 :(得分:0)

我发现了这个问题。 <Directory /var/www/project/public>指向了错误的目录。