【问题标题】:.htaccess combine multiple RewriteCond with several RewriteRule.htaccess 将多个 RewriteCond 与多个 RewriteRule 组合
【发布时间】:2012-11-08 11:53:49
【问题描述】:

因为我是 .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]

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

【问题讨论】:

  • 确保浏览器不会在您希望显示英文网站时同时发布 both deen 接受语言。在这种情况下,第一个(德国人)将获胜。此外,语言匹配对我来说有点奇怪 - 我会使用更清晰的符号,如下所示:RewriteCond %{HTTP:Accept-Language} ^.*de.*$ [NC]
  • 感谢您的回答和提示。由于检查用户位置然后为“英语”访问者设置适当的时间实在是太费力了,所以我将 htaccess 更改为固定重定向到白色背景。由于德国只有一个时区,而且英语传播得如此广泛——这个解决方案完全适合我。

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


【解决方案1】:

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

/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 .开始

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 今年 - 如果那是必要的话......我想我会接受它 又是一年。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2021-08-08
    • 2012-04-22
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多