将Apache升级到2.4后,内部URL重写不再起作用

我需要在内部重写基本URL,以便/映射到/index.PHP认行为),而不是映射到名为contents.PHP的另一个脚本。 我在doc根目录下有一个简单的.htaccess文件

RewriteEngine on RewriteRule ^/?$ /contents.PHP?id_cat=0 [L]

这与Apache 2.2工作正常,不再适用于Apache 2.4.6。 现在,它被简单地忽略,并且/index.PHP脚本最终被调用

但是,如果我添加重新定位标志:

RewriteEngine on RewriteRule ^/?$ /contents.PHP?id_cat=0 [R,L]

…它确实有用,但它暴露了我不想要的重写URL。

.htaccess删除URL扩展,添加尾随斜杠

PHP / Apache:使用.htaccess重写规则

https非www到https www

尾随斜杠导致错误代码500

基于Accept-Language的redirect

我尝试使用PT(passthrough)标志[PT,L]和[END]但没有运气。

我错过了什么?

编辑:我启用了重写跟踪日志logging,这是我得到了一个单一的请求:

[Sat Nov 16 17:43:22.021036 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b67b0a0/initial] [perdir /var/www/bacityapartments/] strip per-dir prefix: /var/www/bacityapartments/ -> [Sat Nov 16 17:43:22.021075 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b67b0a0/initial] [perdir /var/www/bacityapartments/] applying pattern '^/?$' to uri '' [Sat Nov 16 17:43:22.021087 2013] [rewrite:trace2] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b67b0a0/initial] [perdir /var/www/bacityapartments/] rewrite '' -> '/contents.PHP?id_cat=0' [Sat Nov 16 17:43:22.021096 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b67b0a0/initial] split uri=/contents.PHP?id_cat=0 -> uri=/contents.PHP,args=id_cat=0 [Sat Nov 16 17:43:22.021111 2013] [rewrite:trace1] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b67b0a0/initial] [perdir /var/www/bacityapartments/] internal redirect with /contents.PHP [INTERNAL REDIRECT] [Sat Nov 16 17:43:22.021197 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] strip per-dir prefix: /var/www/bacityapartments/in dex.html -> index.html [Sat Nov 16 17:43:22.021208 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] applying pattern '^/?$' to uri 'index.html' [Sat Nov 16 17:43:22.021218 2013] [rewrite:trace1] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] pass through /var/www/bacityapartments/index.html [Sat Nov 16 17:43:22.021268 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] strip per-dir prefix: /var/www/bacityapartments/in dex.cgi -> index.cgi [Sat Nov 16 17:43:22.021290 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] applying pattern '^/?$' to uri 'index.cgi' [Sat Nov 16 17:43:22.021299 2013] [rewrite:trace1] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] pass through /var/www/bacityapartments/index.cgi [Sat Nov 16 17:43:22.021345 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] strip per-dir prefix: /var/www/bacityapartments/in dex.pl -> index.pl [Sat Nov 16 17:43:22.021355 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] applying pattern '^/?$' to uri 'index.pl' [Sat Nov 16 17:43:22.021364 2013] [rewrite:trace1] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6790a0/subreq] [perdir /var/www/bacityapartments/] pass through /var/www/bacityapartments/index.pl [Sat Nov 16 17:43:22.021389 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] strip per-dir prefix: /var/www/bacityapartments/in dex.PHP -> index.PHP [Sat Nov 16 17:43:22.021398 2013] [rewrite:trace3] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] applying pattern '^/?$' to uri 'index.PHP' [Sat Nov 16 17:43:22.021407 2013] [rewrite:trace1] [pid 5895] mod_rewrite.c(468): [client 127.0.0.1:55297] 127.0.0.1 - - [bacityapartments.localhost/sid#7f7e3b748400][rid#7f7e3b6740a0/subreq] [perdir /var/www/bacityapartments/] pass through /var/www/bacityapartments/index.PHP 00

所以重写正在执行,但是它继续进行,就好像没有。

编辑2:如果我将此规则移动到虚拟主机configuration文件,它按预期工作。 更多信息可以在这里find。

此外,这个问题只发生在目录本身。 例如,如果我将/contents.PHP?msg=hello重写为/hello ,那么它也可以从.htaccess中正常工作。

使用.PHP扩展名redirect所有文件

如何使用.htaccess检查文件是否存在于caching中,如果没有则加载正常脚本

URL重写规则基于一定的条件

从HTTP切换到HTTPS,失去了所有Facebook的“喜欢”

.htaccess重写友好的URL

这是Apache 2.4中的一个已知的错误 。 我使用了这里提供的解决方法 ,现在正在工作。

我有问题与SEO链接(Prestashop网站是确切的)。 选项是添加

AllowOverride All

在虚拟主机的目录中:

<Directory /srv/path_to_public/public_html/> AllowOverride All </Directory>

从apache文档:

http://httpd.apache.org/docs/current/mod/core.html#allowoverride AllowOverride None(2.3.9及更高版本),AllowOverride All(2.3.8及更早版本)

升级到Apache 2.4.6后,我在虚拟主机上也有了404重定向wordpress

在我的情况下,通过将“AllowOverride None”更改为“AllowOverride FileInfo”来解决每个虚拟主机目录配置的问题。

我也偶然发现了这个非常恼人的问题。 解决办法是在httpd.conf中通过为所需目录添加-MultiViews来禁用MultiViews ,例如:

<Directory /home/example.com/public_html> Options -Indexes -MultiViews AllowOverride All Require all granted </Directory>

之后,重写开始工作预期的方式。

编辑配置文件后不要忘记重新加载Apache。

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...