【问题标题】:Use symfony 1.4 without changing apache configuration在不更改 apache 配置的情况下使用 symfony 1.4
【发布时间】:2010-05-22 19:18:30
【问题描述】:

是否可以在不更改apache配置文件的情况下将/web目录设置为webroot?

我尝试使用以下 .htaccess 代码,但如果我转到 localhost/module/,它会显示 404 错误。但是如果我去 localhost/web/module/ 那么一切正常。

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    sf/(.*) lib/vendor/symfony/data/web/sf/$1 [L]
   RewriteRule    ^$ web/    [L]
   RewriteRule    (.*) web/$1 [L]
</IfModule>

【问题讨论】:

    标签: apache mod-rewrite symfony1 symfony-1.4


    【解决方案1】:

    我喜欢在根目录上这样做:

    RewriteEngine On
    RewriteBase /
    RewriteRule (.*) ./web/$1 [L]
    

    并编辑 web/.htaccess 取消注释 'RewriteBase /' 行。

    这使得所有 mysite.com/aaaa/bbbb 都像 mysite.com/web/aaaa/bbbb 一样工作

    【讨论】:

      【解决方案2】:

      简短回答:不。

      再长一点:您至少必须编辑 apache 配置以授予其访问 web/ 目录的权限,因此即使您将 web 文件夹符号链接到 /var/www,它也不起作用。

      【讨论】:

      • 我的web目录路径是/home/xx/public_html/web
      • 那为什么不把 /home/xx/public_html 作为你的 webroot 呢?将您的代码放在 /home/xx 中,然后编辑您的 ProjectConfiguration 以调用 $this-&gt;setWebDir?如果可行,我会更新我的答案。
      • 我已经把我所有的 symfony 文件放到 /home/xx/private_html/ 并且只把 /web 文件夹的内容放到 /home/xx/public_html/ 但是现在我不能让它工作了。 Symfony 仍在 /home/xx/public_html/ 文件夹中寻找它的文件。
      • 把这些放在你的 ProjectConfiguration 类中:$this-&gt;setWebDir("/home/xx/public_html/"); $this-&gt;setRootDir("/home/xx/private_html/"); 我正在使用类似的东西,但是我的 symfony 文件在 /home/xx,而 webroot 是 /home/xx/public_html。跨度>
      • 它仍然试图从 public_html 中找到它的文件
      【解决方案3】:

      这很安静,类似于我的问题Symfony on virtual host (document root problem)

      这是我在项目根目录下的.htaccess

      RewriteEngine On
      RewriteBase /       
      
      RewriteCond %{REQUEST_URI} ^/images/  [OR]
      RewriteCond %{REQUEST_URI} ^/js/      [OR]
      RewriteCond %{REQUEST_URI} ^/css/
      RewriteRule ^(.*)$ /web/$1 [L]
      
      RewriteCond %{REQUEST_URI} !^/web/
      RewriteRule ^(.*)$ /web/index.php [QSA,L]
      

      这解决了我的问题,但 symfony 尝试从文档根目录生成每个 url(例如使用 url_for),所以它生成的不是像 domain.com/my-article 这样的 url,而是生成 domain.com/web/my-article
      我不得不稍微修改我的 PatternRouting 类来修剪每个 url 中的 /web 前缀。我认为这不是最好的解决方案,但它确实有效。

      另外,如果我想访问后端应用程序,我必须始终调用/web/backend.php/,因为我不想在.htaccess 中有这么多重写规则。

      如果你想看我扩展的PatternRouting 类源代码,我会贴在这里。

      【讨论】:

        【解决方案4】:

        是的,这是可能的。将所有内容从 web/ 复制到您的文档根目录。编辑 index.php 以反映它包含的所有内容现在比以前更接近其当前目录一级(少一级 ../)。您不必编辑任何其他 Symfony 文件。

        【讨论】:

          猜你喜欢
          • 2017-07-15
          • 2020-03-09
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          • 2014-07-23
          • 1970-01-01
          • 2016-10-07
          相关资源
          最近更新 更多