我一直在关注如何配置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?
谢谢!
答案 0 :(得分:6)
我不知道Symfony。但是它应该可以与所有apache2和php项目一起使用。
首先,您需要做两件事:
您需要检查是否已启用php rewrite模块。您可以使用phpinfo()
来完成。将此写入文件info.php
,然后在浏览器中打开:http://localhost/info.php
现在搜索mod_rewrite
。如果您在此页面中看到mod_rewrite
,则表示mod_rewrite
已启用。
mod_rewrite
,请启用它。我在Ubuntu 18.04中使用以下命令启用了Apache:$ sudo a2enmod rewrite
。然后重新启动apache2 $ systemctl restart apache2
mod_rewrite
,则其他配置将起作用。然后在AllowOverride All
文件中添加.conf
:
<Directory /var/www/project/public>
AllowOverride All
</Directory>
然后在项目根目录中添加.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>
指向了错误的目录。