我最近将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]
有办法做到这一点吗?谢谢!
答案 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]