2013-05-02 103 views
2

Недавно я изменил свой index.html на index.php - я хочу иметь возможность сделать перенаправление, чтобы отразить это, а затем также переписать, что заставляет foo.com/index.php просто быть foo.com/ и получить доступ к файлу .php.Как htaccess перенаправить index.html на index.php и index.php на/

У меня также есть отдельный сайт, т. Е. Bar.com, расположенный в подкаталоге foo.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] 

Есть ли способ сделать это? Благодаря!

ответ

5

директива RedirectMatch соответствует после внутреннего редиректа, который принимает / запрос и перенаправляет его на /index.html, то получить снова положить через отображение трубопровод URL-файл и, таким образом, соответствует вашей директиве переадресации.

Вы можете попробовать в том числе: с

DirectoryIndex index.php 

, чтобы предотвратить это автоматический внутренний редирект. Вы должны также использовать %{THE_REQUEST} матч с файлом index.html, как вы делаете с 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] 

Или вы можете обойти index.php полностью:

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

Абсолютно красивый. Именно то, что я хотел/нуждался. Бесконечно благодарен! –