代码之家  ›  专栏  ›  技术社区  ›  Jurian Sluiman

.htaccess regex在rewriterule匹配项中,变量保持为空

  •  0
  • Jurian Sluiman  · 技术社区  · 14 年前

    我在.htaccess中有一些条件和规则:

    RewriteCond %{DOCUMENT_ROOT}/assets/img$1/.$2.$4/$3.$4 -f
    RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ assets/img$1/.$2.$4/$3.$4 [NC]
    RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ assets/img/image.php?path=$1&file=$2.$4&template=$3 [NC,L,QSA]
    

    regex是正确的(已测试并匹配,在这个.htaccess[1]中也是如此)。变量$1、$2、$3和$4仍然是空的。我不知道为什么会这样。

    不久前,我在/etc/apache2/sites available/中为每个站点启用了自己的vhost配置,但过了一段时间,我使用serveraalias和virtualdocumentroot将其自动化:

    ServerAlias *.localhost
    VirtualDocumentRoot "/var/www/%1/public"
    

    此自动将subdomain.localhost映射到/var/www/subdomain/public。另外,我需要调整.htaccess。我必须插入一个rewritebase

    RewriteBase /
    

    这导致(我想)我的重写器不再工作了。这是真的吗?如果是这样的话,我怎么能把它们换成新的呢?


    PS[1]我用这个重写器验证了这一点:

    RewriteRule ^assets/img(.*)/[a-zA-Z0-9-_\.]*\.[^/]+\.[a-z]{2,4}$ script.php?1=$1&2=$2&3=$3&4=$4 [L]
    

    当您检查脚本($\u get)中的参数时,它们的键存在于$\u get中,但它们都包含空字符串。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Jurian Sluiman    14 年前

    我自己解决了问题。如果其他人偶然发现这个问题,下面是答案。

    够蠢的,我去掉了正则表达式中的括号。通过更改:

    [a-zA-Z0-9-_\.]*
    

    进入这个:

    ([a-zA-Z0-9-_\.]*)
    

    它又工作了!