.htaccess重定向问题 - www redirect按预期工作,但index.html没有重定向到root

时间:2014-08-15 17:07:40

标签: apache .htaccess mod-rewrite redirect

我看到整个网络上都有这么多问题,但我现在找不到任何解决我特定的.htaccess问题的问题!在我的.htaccess文件中,我有规则将a)非www重定向到www和b)index.html到root。正在满足非www到www条件并成功重定向。但是,index.html文件不会重定向到根目录。

我还使用http://htaccess.madewithlove.be进行了测试。那里的调试日志表明“不支持这个变量:%{THE_REQUEST}”,随后,不满足index.html重定向的重写条件,但我无法猜测为什么或该变量是否是真正的罪魁祸首。我还要提到这个特定的域是另一个域的子域/附加域。下面描述的.htaccess文件位于子域的根目录中。主域级别的.htaccess文件目前为空白。

这是我现有的.htaccess内容:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在root .htaccess中保留这样的规则:

DirectoryIndex index.html
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]

RewriteCond %{THE_REQUEST} /index\.html [NC]
RewriteRule ^(.*?)index\.html$ /$1 [L,R=302,NC,NE]

在新浏览器中测试。

答案 1 :(得分:0)

放下第一个RewriteCond。它不是您需要的。仅第一个RewriteRule就可以解决您的问题。

也许您还想更新第一个RewriteRule。在当前表单中,它将重定向(无论使用哪个域)到http://www.example.com/。如果您想“保留”使用过的子域,请将重定向设为相对:

RewriteRule ^(.*)index\.html?$ /$1 [R=301,L]