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不可用

htaccess正则规则学习笔记整理

复杂的 htaccess 重写规则 - 我从哪里开始?

友好的 URL htaccess 重写规则正则表达式 [关闭]

.htaccess 重写规则破坏 css

在 XAMPP 中使用 .htaccess local 重写 URL