微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐