我需要在内部重写基本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。
PHP / Apache:使用.htaccess重写规则
https非www到https www
基于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中正常工作。
如何使用.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。