将域重定向到路径但排除某些URL

时间:2014-09-18 10:33:04

标签: apache .htaccess mod-rewrite redirect

我有两个域名。

我们只是打电话给他们

example.comexample.de.

现在,当有人在地址中输入example.com时,他会访问我的网站example.com。但是,如果用户输入example.de,他将被重定向到example.com/de。路径也是如此:

example.de/a => example.com/de/a

我现在想要实现的目标是,"具体"网址不应该被重定向。

所以,而

example.de/a仍应重定向到example.com/de/a/
example.de/b/应保留example.de/b/

所以,目前我的.htaccess,其中一部分,看起来像这样

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{http_host} example\.de [NC]
RewriteRule ^(.*)$ http://www.example.com/de/$1 [L,R=301]

现在,我想排除特定的网址,所以我到目前为止做的是以下内容

RewriteCond %{http_host} example\.de [NC]
RewriteCond %{REQUEST_URI} !/b
RewriteRule ^(.*)$ http://www.example.com/de/$1 [L,R=301]

问题是,.de/b仍然重定向到.com/de/b

另一部分可能对您感兴趣的是,在.htaccess的最后一行,我将任何不以.com结尾的内容重定向到.com

### SUBDOMAIN REDIRECT *.DOMAIN.TLD -> www.DOMAIN.TLD
RewriteCond %{http_host} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

那么,任何人都有任何想法,有什么可以解决这个问题?

回应anubhava回答

我现在已将我的.htaccess更改为此

### SUBDOMAIN REDIRECT *.DOMAIN.TLD -> www.DOMAIN.TLD
RewriteCond %{http_host} example\.de [NC]
RewriteCond %{THE_REQUEST} !/b
RewriteRule ^(.*)$ http://www.example.com/de/$1 [L,R=301]

### SUBDOMAIN REDIRECT *.DOMAIN.TLD -> www.DOMAIN.TLD
RewriteCond %{http_host} !^www\.example\.com [NC]
RewriteCond %{THE_REQUEST} !/b
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

但问题仍然存在。 :(

1 个答案:

答案 0 :(得分:1)

您最好在条件中使用THE_REQUEST变量:

RewriteCond %{http_host} example\.de [NC]
RewriteCond %{THE_REQUEST} !/b
RewriteRule ^(.*)$ http://www.example.com/de/$1 [L,R=301]

THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1