2016-01-31 94 views
1

我在我的.htaccess文件中尝试此代码,但由于某种原因,当我在浏览器中尝试文件/1.html时,它一次又一次地进入请求/1的重定向循环。如何避免在.htaccess中重写和重定向循环

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [L] 

RewriteBase/
RewriteCond %{REQUEST_URI} \.html$ 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^(.*)\.html$ $1 [R=302,L] 

我已经通过apache文档,只有得到的Apache可以重新启动处理重写规则在某些情况下。任何人都可以帮忙

回答

1

你的两个规则都是做对立面,并且确实会造成无限循环。要解决,你需要一个重定向规则基于THE_REQUEST变量,因为它代表着从你的浏览器Apache接收到原始请求,并没有得到其他重写规则执行后覆盖:

RewriteEngine On 

## hide .html extension 
# To externally redirect /dir/foo.html to /dir/foo 
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html [NC] 
RewriteRule^/%1 [R,L] 

## To internally redirect /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+?)/?$ $1.html [L]