首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony .htaccess DirectoryIndex不工作

Symfony .htaccess DirectoryIndex不工作
EN

Stack Overflow用户
提问于 2015-09-26 10:35:15
回答 1查看 4.7K关注 0票数 2

我正在将symfony应用程序部署到生产中,我已经将symfony应用程序放在根文件夹/var/www/html中,并将apache2根目录设置为/var/www/html/web,但是.htaccess文件中的DirectoryIndex没有重定向到文件app.php

在url xxx.xxx.xx.xx/我获得/var/www/html/web文件夹中所有文档的列表,如果我执行xxx.xx.x.xx/app.php,则加载应用程序。

我不明白如何让DirectoryIndex在.htaccess中工作。

我已经经历了以下堆栈问题类型,但它们对我不起作用:

另一篇文章建议将apache2根目录设置为/var/html,而不是/var/html/web,但这也行不通。因为url xxxx.xxx.x.xx/淡化了目录/var/html的内容。

与我找到的解决方案最接近的是将文件app.php重命名为index.php,这会使根url xxx.xx.x.xx/加载,但是所有的'sub‘url都会失败(就像app.php失败一样,出现一个404NotFindError)。这是由于.htaccess文件没有正确地重定向url,因为url.htaccess工作正常。

我的.htaccess文件看起来如下(它是默认生成的文件):

代码语言:javascript
复制
DirectoryIndex app.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

任何帮助都很感激。这一点很关键,因为我无法让我的应用程序继续生产。

更新

@shevron的答案是正确的。他的回答是:“Apache安装程序可能根本不解析.htaccess文件。”和“检查目录上AllowOverride的主要Apache配置。尝试将其设置为AllowOverride all并重新启动Apache --看看这是否有效。”

我做了以下工作:

我将Apache配置设置为:

代码语言:javascript
复制
 <VirtualHost *:80>
    
     ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html/web
      <Directory "/var/www/html/web">
        AllowOverride All
        Allow from All
      </Directory>
    
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      
   </VirtualHost>

这是行不通的。@shevron,我写得不好吗?

但是,进一步地,我将.htaccess文件中的所有配置都放入了主要的Apache中,这使得重定向工作得以完成:

代码语言:javascript
复制
  <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/web
    <Directory "/var/www/html/web">
          AllowOverride All
          Allow from All
    </Directory>

    DirectoryIndex app.php

    <IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
        RewriteRule ^(.*) - [E=BASE:%1]

        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

        RewriteCond %{ENV:REDIRECT_STATUS} ^$
        RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule .? - [L]

        RewriteRule .? %{ENV:BASE}/app.php [L]
    </IfModule>

    <IfModule !mod_rewrite.c>
        <IfModule mod_alias.c>
            RedirectMatch 302 ^/$ /app.php/
        </IfModule>
    </IfModule>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

  </VirtualHost>

所以现在重定向开始起作用了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-26 10:40:54

您的Apache安装程序可能根本不解析.htaccess文件(实际上,出于性能和安全方面的考虑,这可能是对单租户生产服务器的推荐)。

检查该目录上的AllowOverride的主要Apache配置。尝试将其设置为AllowOverride All并重新启动Apache --看看这是否有效。

如果可以的话,我建议将.htaccess文件的内容移到主要Apache文件中的<Directory><VirtualHost>部分(或者更好的话,将其包含在一个单独的文件中)并设置AllowOverride None

我发现了这个:http://symfony-check.org/permalink/optimize-apache-avoid-htaccess,它是专门为Symfony提供一些细节的,虽然我不知道它是否是最新的,因为我不是Symfony的用户。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32796225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档