这个htaccess规则实际上是做什么的

时间:2014-08-22 16:27:57

标签: apache .htaccess

我有这个条件和规则,想知道这里到底发生了什么

RewriteCond %{REQUEST_URI} ^/sitepages/newversion/
RewriteCond %{QUERY_STRING} ^(.*[?|&])page=dynamicpage
RewriteRule ^sitepages/newversion/(.*)$ /pages/oldversion/$1 [L]

对这条线的细节解释也非常感兴趣

RewriteRule ^sitepages/newversion/(.*)$ /pages/oldversion/$1 [L]

感谢

2 个答案:

答案 0 :(得分:1)

首先,您可以更好地重写您的规则:

RewriteCond %{QUERY_STRING} (?:^|&)page=dynamicpage(?:&|$) [NC]
RewriteRule ^sitepages/newversion/(.*)$ /pages/oldversion/$1 [L,NC]

现在解释部分。

  • RewriteCond匹配URI与查询参数page=dynamicpage
  • RewriteRule匹配的URI与模式sitepages/newversion/(.*)$匹配/sitepages/newversion/abc123/sitepages/newversion/foobar
  • (.*)正在捕获组,以便在我的第一个示例中使用值$1填充abc123
  • 在目标中,我们使用的/pages/oldversion/$1对于相同的示例将成为/pages/oldversion/abc123
  • NC标志不用于大小写比较。
  • L标志用于Last,使mod_rewrite再次运行重写循环。

参考:Apache mod_rewrite Introduction

Apache mod_rewrite Technical Details

答案 1 :(得分:1)

RewriteCond %{REQUEST_URI} ^/sitepages/newversion/

如果请求网址以" / sitepages / newversion /"开头,

RewriteCond %{QUERY_STRING} ^(.*[?|&])page=dynamicpage

,查询字符串包含" page = dynamicpage",

RewriteRule ^sitepages/newversion/(.*)$ /pages/oldversion/$1 [L]

然后在" sitepages / newversion /"之后获取网址的一部分;并将请求重定向到" / pages / oldversion /(其余网址)"。

例如:

http://domain.com/sitepages/newversion/someleaf?page=dynamicpage

将被重定向到

http://domain.com/pages/oldversion/someleaf?page=dynamicpage