symfony2 重写规则 .htaccess app.php
Posted
技术标签:
【中文标题】symfony2 重写规则 .htaccess app.php【英文标题】:symfony2 rewrite rules .htaccess app.php 【发布时间】:2012-06-24 08:36:30 【问题描述】:我将我的 symfony2 项目上传到服务器 grove。主页加载,但所有链接都已损坏。我尝试将 app.php 添加到网址。它确实有效,但是:
我有这样的路线:
www.something.com/app.php/something
我希望他们成为:
www.something.com/something.
我一直在阅读,我应该在.htaccess 上设置一些重写规则。
我找到了这些规则,但它们似乎不起作用:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
【问题讨论】:
Francisco Ochoa,查看日志文件。 app/logs/ 哪里可以找到错误。 mod_rewrite 真的开启了吗? 感谢 Inori。这是一个不错的提示;)。我检查了它,是的,它已启用。 @Blueblazer172 symfony.com/doc/current/setup/web_server_configuration.html。如果这不能解决您的问题,请打开一个新问题。 我同意。我想不出自 2012 年以来 Symfony 的任何变化都需要对已接受的答案进行任何更改。 【参考方案1】:在你的 .htaccess 文件中试试这个(在 web 目录中):
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Explicitly disable rewriting for front controllers
RewriteRule ^app_dev.php - [L]
RewriteRule ^app.php - [L]
RewriteCond %REQUEST_FILENAME !-f
# Change below before deploying to production
#RewriteRule ^(.*)$ /app.php [QSA,L]
RewriteRule ^(.*)$ /app_dev.php [QSA,L]
</IfModule>
【讨论】:
我添加了,但是当我去 www.something.com 时,它说有一个错误... 您是否删除了文件中的所有其他内容? 如果其他人从 apache 收到 400 bad request sent 错误,请尝试在重写时添加斜杠,即 RewriteRule ^(.*)$ /app_dev.php [QSA,L] 这些建议花了我很多时间,出现错误,此处不允许使用选项 当我部署到生产环境时(注释 RewriteRule ^(.*)$ /app_dev.php [QSA,L] 并取消注释 RewriteRule ^(.*)$ /app.php [QSA,L])它给了我一个错误。如果我像这个解决方案一样离开它,它可以工作,但它会重定向到 app_dev.php :( 有什么帮助吗?【参考方案2】:为了改进 whistlergreg 的回答,我添加了一行,这样 bundles 文件夹就不会损坏。这将确保图像等外部资源不会损坏。
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Explicitly disable rewriting for front controllers
RewriteRule ^/web/app_dev.php - [L]
RewriteRule ^/web/app.php - [L]
# Fix the bundles folder
RewriteRule ^bundles/(.*)$ /web/bundles/$1 [QSA,L]
RewriteCond %REQUEST_FILENAME !-f
# Change below before deploying to production
#RewriteRule ^(.*)$ /web/app.php [QSA,L]
RewriteRule ^(.*)$ /web/app_dev.php [QSA,L]
</IfModule>
【讨论】:
【参考方案3】:您没有启用重写模块。如果启用了 mod_rewrite.c,则执行此代码。您只能在 apache2 中启用 mod_rewrite。 http://www.unixmen.com/how-to-enable-and-disable-apache-modules/
例如在 Ubuntu 中:
sudo a2enmod rewrite
sudo service apache2 restart
【讨论】:
【参考方案4】:另外,...记得取消注释(如果已注释)apache 配置:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
MacOsX
/private/etc/apache2/httpd.conf
【讨论】:
【参考方案5】:您可以尝试提供资产的完整路径(完整网址)。我在部署第一个 symfony 应用程序时遇到了同样的问题
我的根目录(大多数情况下是public_html文件夹).htaccess文件看起来像这样
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteCond %HTTP_HOST ^(www\.)?mydomain\.com$ [NC]
RewriteRule !^projectName/ /projectName/web/app.php/%REQUEST_URI [L,NC]
【讨论】:
以上是关于symfony2 重写规则 .htaccess app.php的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用.htaccess mod重写规则,PHP Cookie不可用