【问题标题】:.htaccess regex in RewriteRule matches, variables remain emptyRewriteRule 匹配中的 .htaccess 正则表达式,变量保持为空
【发布时间】:2010-10-26 16:12:47
【问题描述】:

我的 .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]

正则表达式是正确的(经过测试并且匹配,也在这个 .htaccess [1] 中)。变量 $1、$2、$3 和 $4 仍然是空的。而且我不确定为什么会这样。

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

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

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

RewriteBase /

这导致(我认为)我的 RewriteRules 不再起作用。这是真的?如果是这样,我怎样才能将这些更改为再次工作?


PS [1] 我使用这个 RewriteRule 验证了这一点:

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

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

【问题讨论】:

    标签: .htaccess apache2 mod-rewrite


    【解决方案1】:

    我解决了自己的问题。万一其他人偶然发现了这个问题,这就是答案。

    很愚蠢,我删除了正则表达式中的括号。通过改变这个:

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

    进入这个:

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

    它又工作了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2015-07-06
      • 1970-01-01
      • 2023-04-02
      • 2023-04-03
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多