.htaccess将多个RewriteCond与几个RewriteRule结合使用

时间:2012-11-08 11:53:50

标签: .htaccess mod-rewrite http-accept-language

因为我是.htaccess的新手,我无法弄清楚如何使这项工作: 在我的网络服务器上,默认的index.html(/ var / www /)应该重定向到不同的其他index.html,关于当天的时间和浏览器语言......

  • /index.html(默认,德语,黑夜背景)
  • /i/index.html(德语,白天背景)
  • /e/index.html(英文,黑夜背景)
  • /e/i/index.html(英文,白天背景)

所有页面都相互链接,以便用户可以在语言和“样式”之间跳转。 仅使用适用于德语的时间条件,但我如何将其与“英语”相结合? 我试过这个,但它不起作用......

Options +FollowSymLinks
RewriteEngine On
RewriteBase /


RewriteCond %{TIME_HOUR} >07
RewriteCond %{TIME_HOUR} <16
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^index\.html$ /e/i/index.html [L]

RewriteCond %{TIME_HOUR} >07
RewriteCond %{TIME_HOUR} <16
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^index\.html$ /i/index.html [L]


RewriteCond %{TIME_HOUR} >16
RewriteCond %{TIME_HOUR} <07
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^index\.html$ /e/index.html [L]

RewriteCond %{TIME_HOUR} >16
RewriteCond %{TIME_HOUR} <07
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^index\.html$ /index.html [L]

有人可以帮忙吗? 非常感谢!

我不得不改变网站的结构,所以我也改变了.htaccess文件:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP:Accept-Language} (de) [NC]
RewriteCond %{TIME_HOUR} >07
RewriteCond %{TIME_HOUR} <16
RewriteRule ^index\.html$ /d/i/index.html [L]
RewriteRule ^index\.html$ /d/index.html [L]



RewriteCond %{HTTP:Accept-Language} (en) [NC]
RewriteCond %{TIME_HOUR} >16
RewriteCond %{TIME_HOUR} <07
RewriteRule ^index\.html$ /e/i/index.html [L]
RewriteRule ^index\.html$ /e/index.html [L]

现在德国的时间条件很好,但似乎英语条件甚至没有传递给浏览器...... 有人可以给我一个提示,可能是什么问题? 非常感谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个适合我的解决方案......

在/ var / spool / timing中准备好时间的文件:

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0816

RewriteCond %{TIME_HOUR}%{TIME_MIN} <1603

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0816

RewriteCond %{TIME_HOUR}%{TIME_MIN} <1604

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0815

RewriteCond %{TIME_HOUR}%{TIME_MIN} <1605

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0815

RewriteCond %{TIME_HOUR}%{TIME_MIN} <1606

...

...

...

...

这两个文件与其余部分一样,也在/ var / spool / timing中 .begin

Options -Indexes +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]

RewriteRule ^index\.html$ /e/i/index.html  [L]

RewriteCond %{HTTP:Accept-Language} ^.*de.*$ [NC]

和.end

RewriteRule ^index\.html$ /d/i/index.html  [L]

RewriteRule ^index\.html$ /d/index.html  [L]

RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]

RewriteCond %{TIME_HOUR} >17

RewriteCond %{TIME_HOUR} <06

RewriteRule ^index\.html$ /e/index.html  [L]

每日脚本占用前两行并将它们放入一个新行。 然后它将所有三个文件合并到新的.htaccess中。 最后它再次清理文件。

#!/bin/sh

sed -n 1,2p /var/spool/timing/2014.txt >> /var/spool/timing/.mid

cat /var/spool/timing/.begin /var/spool/timing/.mid /var/spool/timing/.end > 
/var/www/.htaccess

sed -i '1,2d' /var/spool/timing/.mid & sed -i '1,2d' 
/var/spool/timing/2014.txt

所以最终每天都有一个新的.htaccess:

Options -Indexes +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]

RewriteRule ^index\.html$ /e/i/index.html  [L]

RewriteCond %{HTTP:Accept-Language} ^.*de.*$ [NC]

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0816

RewriteCond %{TIME_HOUR}%{TIME_MIN} <1603

RewriteRule ^index\.html$ /d/i/index.html  [L]

RewriteRule ^index\.html$ /d/index.html  [L]

RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]

RewriteCond %{TIME_HOUR} >17

RewriteCond %{TIME_HOUR} <06

RewriteRule ^index\.html$ /e/index.html  [L]

到目前为止它运行良好,我只需要在结束时设置一个新的2015.txt 今年 - 如果那是nacessary ......我想我会把它全部拿走 再一年。