【问题标题】:Using custom environment variables in .htaccess在 .htaccess 中使用自定义环境变量
【发布时间】:2010-09-02 13:12:41
【问题描述】:

我需要这样的东西:

SetEnv foo bar.baz
RewriteEngine On

RewriteCond %{HTTP_HOST} ^%{foo}$
RewriteRule ^(.*)$ http://www.foo/$1 [L]

UPD:

我做了如下:

SetEnv HOSTNAME_ENV testsite
RewriteEngine On
RewriteCond %{HTTP_HOST} ^%{ENV:HOSTNAME_ENV}
RewriteRule ^(.*)$ http://www.%{ENV:HOSTNAME_ENV}/$1 [L,R=301]

但它不起作用。 %{ENV:HOSTNAME_ENV} 未定义。

【问题讨论】:

    标签: .htaccess mod-rewrite environment-variables


    【解决方案1】:

    这不起作用,因为mod_rewrite 不会扩展测试模式中的变量。因此,您的表达式将尝试匹配正则表达式 ^%{foo}$,而不是 ^value_of_foo$

    此外,SetEnv 的文档还特别说明了与mod_rewrite 相关的处理顺序。这实际上在这里发挥了作用,尽管在请求处理中应用的规则比他们在那里描述的场景要晚。如果您在针对您设置的环境变量进行测试之前没有执行导致内部重定向的重写,它将为空白。

    假设你正确设置了变量,一个潜在的解决方法是这样做,虽然我觉得它不是万无一失的:

    RewriteCond %{HTTP_HOST}#%{ENV:foo} ^([^#]+)#\1$
    

    【讨论】:

      【解决方案2】:

      只需使用重写规则设置环境:

      RewriteRule (.*) $1 [E=HOSTNAME_ENV:whatever.com]
      

      这还有一个好处,就是你可以使用 RewriteCond。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        • 2013-07-28
        • 2015-01-01
        相关资源
        最近更新 更多