如何在htaccess中使用动态变量?

时间:2017-02-05 20:31:46

标签: regex .htaccess mod-rewrite

我有这个例子,它在这种情况下工作正常,但我想根据域名动态地重定向到子文件夹。如何将example.com替换为当前域?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule !^example.com/ /example.com%{REQUEST_URI} [L,NC]
</IfModule>

我尝试过这样的事情:(但收到内部错误)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule !^$1/ /$1%{REQUEST_URI} [L,NC]
</IfModule>

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

RewriteEngine on

RewriteCond %{ENV_REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^ /%1%{REQUEST_URI} [L]

第一条规则很重要,因为它会在第二次迭代时终止重写处理并防止循环错误。

答案 1 :(得分:0)

反向引用为%1,因为它来自最后一个RewriteCond。但是你不能使用它,因为这些反向引用只会在替换中被识别,参见RewriteRule

  

除了纯文本,替换字符串可以包含

     
      
  1. 反向引用($ N)到RewriteRule模式
  2.   
  3. 反向引用(%N)到最后匹配的RewriteCond模式
  4.   

RewriteCond测试字符串

  

TestString 是一个字符串,除了纯文本外,还可以包含以下扩展结构:

     
      
  • RewriteCond反向引用:这些是%N 形式的反向引用(0 <= N <= 9)。 %1到%9提供对模式的分组部分(同样,在括号中)的访问,从当前条件集中的最后匹配的RewriteCond。 %0提供对该模式匹配的整个字符串的访问。
  •   

因此,作为结论,您无法在规则模式中使用它,例如

RewriteRule pattern substitution

或条件模式

RewriteCond teststring condpattern