【问题标题】:symfony2 on shared hosting共享主机上的 symfony2
【发布时间】:2012-04-20 21:03:01
【问题描述】:

我已经为此工作了很长一段时间,但无济于事。我在共享的网络主机上安装了 symfony,在该主机上我零访问权限以将 DocumentRoot 更改为 web/ 文件夹,因此这不是我的选择...

我已经编写了我的 htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^$ web/app.php [QSA]
RewriteRule ^(.*)$ web/app.php/$1 [QSA, L]

我也用RewriteBase web/RewriteBase /web/ 尝试过,但无济于事。

有了这个,symfony 正在工作..我可以登录,我可以做所有这些...唯一的问题是,没有任何资产显示...Chrome 开发人员工具告诉我它正在找到一个 404,它是正确,因为它没有将 /web/ 文件夹作为 DocumentRoot..

读取

那么,如何在不重写文件或其他任何东西的情况下解决此问题.. 必须有一种方法可以仅使用 .htaccess...

【问题讨论】:

  • 你应该使用 symfony 提供的原始 htaccess 并重写你的应用程序。因为使用该 htaccess ,所有针对静态资产的请求都使用重写规则进行处理。你的重写条件在哪里?

标签: .htaccess mod-rewrite symfony shared-hosting


【解决方案1】:

一种方法是在app/config.yml 中设置assets_base_urls,例如

framework:
    #..
    templating:      
        engines: ['twig']
        assets_base_urls: http://your.site.com/web/

【讨论】:

  • 好吧,那行得通..但是现在有一个问题要问你..假设我有 2 个域针对相同的 symfony 安装——相同的网站相同的一切..唯一的区别是,一个针对 app_dev .php(并且该域的 documentRoot 已设置为 /web/),但我希望资产仅显示:/web/ 用于其他域而不是 your.site.com/web 我该怎么做?只需将 assets_base_urls 设置为 web/ 就破坏了在 httpd 级别设置的任何内容(在我的本地主机上尝试过)
  • 想通了...在我的 config.yml 中我按照你说的做了,除了我做了 assets_base_urls: web/ 然后在我的 config_dev.yml 中我只是放了:模板:assets_base_urls:/刷新了两个实例,它工作......漂亮;)
【解决方案2】:

或者,您可以在 DocumentRoot 文件夹中放置一个 .htaccess 文件,然后将其中的所有内容相应地重写到您的 /web 文件夹中:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /web/$1 [QSA,L]
</IfModule>

这样您就可以获得干净的 URL(省略“web”或“app.php”),并且无需在配置中使用 assets_base_urls 内容。

【讨论】:

  • -1 .. 如果您看,这与路由无关...它与资产由于路由差异而无法正确显示有关... htaccess 无法修复那就是 assets_base_urls 选项。享受吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多