【问题标题】:How to enable mod_redirect in htaccess over HTTP/2 [closed]如何通过 HTTP/2 在 htaccess 中启用 mod_redirect [关闭]
【发布时间】:2020-06-17 13:29:33
【问题描述】:

我已修改我的 Debian 9 安装 (Apache 2.4.25) 以允许 HTTP/2 支持。

我已成功在线检查,页面 确实 提供服务,但问题在于在 .htaccess 中执行的重定向到地图,例如 site.com/index.php/brands/mybrand到一个不错的网址(site.com/brands/mybrand)。它根本不会发生。这是一个 Codeigniter 设置。

  • 有问题的步骤似乎是当我禁用当前模块(a2dismod php7.2mpm_prefork)并启用支持 HTTP/2 的 mpm 模块(a2enmod mpm_event,但我也尝试了mpm_worker)。
  • 此时我得到“找不到文件”(404 错误)
  • 通过还原这两个步骤,我恢复正常(当然没有 HTTP/2)

下面的 mod_rewrite.c 条件是否因加载 mpm_worker 模块而失效?有的话怎么换?

编辑:详细的日志显示此错误: AH01071: 出现错误“主脚本未知\n”,引用者:https://sitename.com/brands/

我的 .htaccess(在 index.php 所在的品牌目录中)与以前的配置一起工作正常是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    RewriteCond %{HTTPS} !on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>
IndexOptions +Charset=UTF-8

我的/etc/apache2/sites-enabled/default-ssl.conf相关内容包括:

<VirtualHost _default_:443>
         # even without enabling here h2c or h2 I get the error
         Protocols http/1.1
         <Directory "/var/www/html">
                 Options Indexes FollowSymLinks MultiViews
                 AllowOverride All
                 # since apache 2.4
                  Require all granted
         </Directory>

</VirtualHost>

注意:我之前为启用所需的其他模块而运行的其他命令如下。我无需触摸任何内容即可恢复到工作(非 HTTP/2)配置:

apt-get install php7.2-fpm
a2enmod proxy_fcgi setenvif
a2enconf php7.2-fpm

编辑:

问题是由于内部重定向造成的。现在已经修复了。

【问题讨论】:

    标签: apache .htaccess mod-rewrite debian http2


    【解决方案1】:

    您没有正确配置 PHP-FPM。通过说a2disconf php7.2-fpm 禁用该 php-fpm 配置。并在 httpd.conf 文件中添加以下内容,这应该可以工作:

    <FilesMatch "\.php$">
    SetHandler  "proxy:fcgi://localhost:9000"
    </FilesMatch>
    ProxyErrorOverride On
    

    重启 Apache 和 PHP-FPM(可能不需要重启 PHP-FPM,但必须重启 Apache)。现在启用 HTTP/2,它应该可以工作了。

    编辑

    OP 在配置中的某些重定向中遇到了这个问题。

    【讨论】:

    • 谢谢。我认为这是有道理的;这有点不对劲。我的 Debian 安装中没有 httpd.conf,我有 apache2.conf 和 conf-available,php7.2-fpm.conf 有类似的内容:&lt;FilesMatch ".+\.ph(ar|p|tml)$"&gt; SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" &lt;/FilesMatch&gt; &lt;FilesMatch ".+\.phps$"&gt; ProxyErrorOverride on Require all granted &lt;/FilesMatch&gt;
    • 照我说的做,禁用该配置。 httpd.conf 和 apache2.conf 一样
    • 是的,我确实在 apache2.conf 中输入了上面的配置,禁用了其他配置,重新启动了 php-fpm 和 apache2 并且......我在浏览器中获取了 php 代码......不知何故它没有被处理由处理程序.. 一旦我禁用 mpm-event 并再次启用 php7.2,它一切都像以前一样工作,没有明显的问题(我保留了所有修改后的配置)
    • 您收到 503 错误,因为您出于某种原因关闭了 PHP-FPM。启动php-fpm服务,就不会出现这个问题了。当您使用我的时,您不应该将其他 SetHandler(s) 用于 PHP-FPM/PHP,因为它不适用于 PHP-FPM。只使用我提供的那个或使用默认值。确保您已启动 PHP-FPM 服务。检查 PHP-FPM 的默认配置端口,通常是 9000 端口。
    • 是的,我支持你!
    猜你喜欢
    • 2016-04-30
    • 2016-09-08
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2018-03-22
    • 2017-04-01
    • 2018-02-12
    相关资源
    最近更新 更多