带有通配符的不正确子目录所需的htaccess重定向规则

时间:2013-01-07 21:57:03

标签: regex .htaccess wildcard subdirectory

我需要帮助编写htaccess重定向或重写规则(mod_rewrite.c)来处理以下情况:

http://www.mysite.com/archive/[YEAR]/archive/[YEAR]/[CORRECT-PATH]

应该重定向到:

http://www.mysite.com/archive/[YEAR]/[PATH]

基本上,有一些外部链接在路径的/archive/[YEAR]/部分错误地加倍,其中应该只有一个实例。我每年都有一个子目录(/ archive / 2011,/ archive / 2012等) - 那些年份目录是单独Drupal安装的根源 - 每个目录都有自己的.htaccess文件(这让我绊倒)。

[CORRECT-PATH]位通常是Drupal页面的别名,例如:

http://www.mysite.com/archive/2012/winners/all

我对通配符和匹配语法不太满意 - 任何帮助都会受到赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

尝试将这些规则添加到您的文档根目录:

RewriteEngine On
RewriteRule ^/?archive/([0-9]{4})/archive/\1/(.*)$ /archive/$1/$2 [L,R=301]

这将检查年份是否重复,任何4位数年份。这样:

  1. http://www.mysite.com/archive/1234/archive/2345/blah/blah什么都不做
  2. http://www.mysite.com/archive/2345/archive/2345/blah/blah被重定向到
    http://www.mysite.com/archive/2345/blah/blah
  3. http://www.mysite.com/archive/1234/blah/blah什么也没做。

  4. 再次查看您的问题后,您需要为每个/archive/[YEAR]目录添加规则:

    RewriteEngine On
    RewriteBase /archive/2011/
    RewriteRule ^archive/[0-9]{4}/(.*)$ $1 [L,R=301]
    

    并更改每个目录的RewriteBase