陷入.htaccess重定向循环

时间:2015-08-03 15:09:34

标签: apache .htaccess mod-rewrite redirect

我正在设置我认为使用htaccess的一组相当简单的重定向规则。

我已经设置了重定向,以便根域转到英国子目录。例如:

http://example.com

转到:

http://example.com/uk

我现在正在尝试同样的事情,但这次是针对个别的html文件。见下文:

http://example.com/index.html
http://example.com/main.html

这些应该发给他们的英国同行:

http://example.com/uk/
http://example.com/uk/main.html

我有index.html工作和重定向很好但在main.html上做类似的事情是引入一个重定向循环,我找不到原因。对于main.html重定向,我从插入符号(^)开始,因此只有在main.html直接跟随域时才匹配。

这是我的.htaccess文件:

 php_value memory_limit 256M

## apc interferes with the autoloader
php_flag apc.cache_by_default Off

Options +FollowSymLinks

#Turn on the RewriteEngine
RewriteEngine On
RewriteBase /

RewriteRule ^index.html /uk/ [R=302,NC,L]

RedirectMatch 301 ^/$  /uk/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([^/]+)/?$  [NC]
RewriteRule ^main.html /uk/main.html [R=301,QSA,L]
RewriteRule (.*)\.html  index.php?key=$1  [QSA,L]

AddType video/mp4 .mp4 .m4v
AddType video/ogg .ogv
AddType video/webm .webm

我尝试了很多没有运气的组合。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

对于使用正则表达式替换的实际情况,您实际上只需要root .htaccess中的一个规则:

AddType video/mp4 .mp4 .m4v
AddType video/ogg .ogv
AddType video/webm .webm

RewriteEngine On

RewriteRule ^((?:index|main)\.html)?$ /uk/$1 [R=302,NC,L]

清除浏览器缓存后进行测试。