【问题标题】:How to configure Apache to have two symfony projects in the same domain (without using subdomains)?如何配置 Apache 在同一个域中有两个 symfony 项目(不使用子域)?
【发布时间】:2011-01-10 00:42:16
【问题描述】:

我正在尝试将 Apache 配置为在同一域下拥有不同的 symfony 项目(每个项目都有自己的框架安装),但我无法使用文件夹使其工作。

这是我想要的:

  • mydomain.com/projectone/
  • mydomain.com/projecttwo/

我可以使用子域使其工作,但不是我的首选解决方案,因为我最终拥有疯狂的子域,例如:

  • projectone.mydomain.com
  • backend.projectone.mydomain.com
  • projecttwo.mydomain.com
  • backend.projecttwo.mydomain.com

我在 Apache 中使用此配置使其与子域一起使用:

<VirtualHost 127.0.0.1:8080>
  ServerName projectone.mydomain.com
  DocumentRoot "/home/projectone/web"
  DirectoryIndex frontend.php
  <Directory "/home/projectone/web">
    Options -Indexes IncludesNOEXEC FollowSymLinks -MultiViews
    AllowOverride None
    Allow from All

    RewriteEngine On
    # we check if the .html version is here (caching)
    RewriteRule ^$ index.html [QSA]
    RewriteRule ^([^.]+)$ $1.html [QSA]
    RewriteCond %{REQUEST_FILENAME} !-f
    # no, so we redirect to our front web controller
    RewriteRule ^(.*)$ frontend.php [QSA,L]
  </Directory>

  Alias /sf /home/projectone/lib/vendor/symfony/data/web/sf
  <Directory "/home/projectone/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

关于如何实现文件夹解决方案的任何想法?

提前致谢, 埃内科

【问题讨论】:

  • 这对我来说很有趣...实际上我自己更喜欢“复杂”域名 ;-) 无论如何,您对访问每个项目中的单个应用程序的期望是什么 - 是 backend.domain.com/project 还是更像domain.com/project/backend.php?我认为这会影响你的工作方式。
  • 这个想法是通过 domain.com/project/backend/ 访问后端应用程序

标签: apache symfony1 virtualhost


【解决方案1】:

我一直这样做。这是相关的 Apache 配置。我还为每个 symfony 应用设置了custom error handlers

 # make sure your symfony install dir is available
<Directory "/var/www/symfony1.4">
    AllowOverride All
    Allow from all
</Directory>

# each app under http://mysite/myapp gets a section like this
Alias /myapp/sf "/var/www/symfony1.4/data/web/sf"
Alias /myapp "/var/www/vhosts/myvhost/sf_apps/myapp/web"
<Directory "/var/www/vhosts/myvhost/sf_apps/myapp/web">
    AllowOverride All
    Allow from all
    ErrorDocument 404 /myapp/default/error404
    ErrorDocument 500 /myapp/myThemePlugin/errors/error500.php
</Directory>

您还需要在 web/.htaccess 文件中修改此行。

# uncomment the following line, if you are having trouble
# getting no_script_name to work
RewriteBase /myapp

【讨论】:

    【解决方案2】:

    我已经尝试过这段代码并且似乎可以工作。由于我尚未对其进行测试,因此我不确定这是否没有错误,但它可以为您提供一个提示。

    <VirtualHost 127.0.0.1:8088>
      Alias /badger /home/amqs/proyectos/sales/nuevo/salesprime/web
      DocumentRoot "/home/amqs/proyectos/sales/nuevo/salesprime/web"
      DirectoryIndex frontend_dev.php
      <Directory "/home/amqs/proyectos/sales/nuevo/salesprime/web">
        AllowOverride All
        Allow from All
      </Directory>
    
      Alias /sales /home/amqs/proyectos/sales/salesprime2/web
      DocumentRoot "/home/amqs/proyectos/sales/salesprime2/web"
      DirectoryIndex frontend_dev.php
      <Directory "/home/amqs/proyectos/sales/salesprime2/web">
        AllowOverride All
        Allow from All
      </Directory>
    
    </VirtualHost>
    

    【讨论】:

      【解决方案3】:

      您可以在 ProjectConfiguration 中使用 setWebDir 方法来指定一个唯一的 Web 目录以在每个项目中提供服务。这将允许您将项目文件(应用程序、配置、lib、插件等)托管在您想要的任何目录 (/home/projectone) 中,同时通常将 web/ 中的文件移动到完全不同的位置 (/home/ mydomain/web/projectone)。您可以选择从 config/ProjectConfiguration.class.php 中的根 ProjectConfiguration 调整整个项目的 Web 目录:

      class ProjectConfiguration extends sfProjectConfiguration
      {
        public function setup()
        {
          $this->setWebDir('/home/mydomain/web/projectone');
        }
      }
      

      或者,如果您希望每个应用程序都有不同的 Web 目录(/projectone/ 用于前端,/projectone/backend/ 用于后端),您可以从每个应用程序中设置 Web 目录apps/myapp/config/myappConfiguration.class.php中的应用配置:

      class myappConfiguration extends sfApplicationConfiguration
      {
        public function configure()
        {
          $this->setWebDir('/home/mydomain/web/projectone');
        }
      }
      

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        试试这个配置。
        这项工作适用于 symfony 2 和 3。

        <VirtualHost 127.0.0.1:8080>
            Alias /app1 /var/www/public_html/app1/web 
            DocumentRoot "/var/www/public_html/app1/web" 
            DirectoryIndex app.php
            <Directory "/var/www/public_html/app1/web"> 
                AllowOverride All
                Allow from All 
            </Directory>
        </VirtualHost>
        

        文档:https://symfony.com/doc/3.3/setup/web_server_configuration.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-25
          • 2017-09-12
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多