我重定向正则表达式出了什么问题?

时间:2014-06-23 23:45:28

标签: regex apache mod-rewrite redirect

我有2个重定向,它们都在内部重定向。

 RewriteEngine on
 RewriteCond %{HTTP_HOST}        ^[^.]+\.[^.]$
 RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
 RewriteRule   ^(.*)\/(.*) /var/www/$1/www.$1/$2 #THIS line is not working

 RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
 RewriteRule   ^([^.]+)\.(.*/)(.*) /var/www/$2$1.$2$3

我无法让第一个工作 应该这样做:
url:example.org/the/uri/the/user/used
rewriterule应该将他重定向到:/var/www/example.org/www.example.org/the/uri/the/user/used

所以我的问题是:我正在寻找的正则表达式是什么?

编辑:

这是我的引擎:)

<VirtualHost *:80>
        ServerAdmin *@gmail.com
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        RewriteEngine on
        RewriteCond %{HTTP_HOST}                ^[^.]+\..[^.]+$
        RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
        RewriteRule   ^([^\/]*)(.*)$            /var/www/$1/www.$1/$2 [L]

        RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
        RewriteRule   ^([^.]+)\.(.*/)(.*) /var/www/$2$1.$2$3 [L]
</VirtualHost>

它将example.org内部重定向到/var/www/example.org/www.example.org
而对于第二部分。它将foo.example.org重定向到/var/www/example.org/foo.example.org

2 个答案:

答案 0 :(得分:1)

你的正则表达式是,

^[^:]*:\s*([^\/]*)(.*)$

没有uri部分,你的正则表达式就是,

^([^\/]*)(.*)$

DEMO

说明:

url: example.org/the/uri/the/user/used

在上面的示例中,:之后的字符串和下一个/被捕获到group1中。剩下的部分被捕获到group2中。通过在替换部分中给出/var/www/$1/www.$1$2可以给出期望的结果。(表示捕获的组的标记可能因语言而异,我使用$来表示捕获的组。)

答案 1 :(得分:1)

我相信这就是你要找的东西:

RewriteCond   %{HTTP_HOST}  (?:www\.)?(.*)
RewriteRule   (.*)          /var/www/%1/www.%1/$1

我在这里测试了它,它按预期工作:http://htaccess.madewithlove.be/