如何htaccess将index.html重定向到index.php和index.php到/

时间:2013-05-02 20:32:43

标签: apache .htaccess redirect rewrite

我最近将index.html更改为index.php - 我希望能够进行重定向以反映这一点,然后还重写强制foo.com/index.php只是foo.com/和让它访问.php文件。

我还有一个单独的网站,即位于foo.com下的子目录中的bar.com,我希望不受影响。

这就是我所拥有的,这导致了一个重定向循环:

RedirectMatch 301 ^/index.html?$ /index.php
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

有办法做到这一点吗?谢谢!

1 个答案:

答案 0 :(得分:5)

{<1}}指令在内部重定向之后匹配,该重定向接收RedirectMatch请求并将其重定向到/,然后它通过URL文件传入再次映射管道,从而匹配您的重定向指令。

您可以尝试包含:

/index.html

以防止此自动内部重定向。您还应该像使用DirectoryIndex index.php 一样使用%{THE_REQUEST}index.html文件匹配:

index.php

或者你可以完全绕过index.php:

Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine on

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html\ HTTP/
RewriteRule ^(.*)index\.html$ /$1index.php [R=301,L]