Apache 使用.htaccess将任何子域重定向到主域

Apache 使用.htaccess将任何子域重定向到主域,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我正在尝试将任何直接访问sub.example.com/login的尝试重定向到example.com/login的原始域/uri,从我已经阅读的关于这件事的大量问题来看,表面上看起来很简单 我不知道是否有什么事情正在覆盖期望的结果,但我的.htaccess文件中有以下规则,但我仍然能够访问sub.example.com/login,而不被重定向 RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+)\.example\.com/login$ [NC]

我正在尝试将任何直接访问
sub.example.com/login
的尝试重定向到
example.com/login
的原始域/uri,从我已经阅读的关于这件事的大量问题来看,表面上看起来很简单

我不知道是否有什么事情正在覆盖期望的结果,但我的.htaccess文件中有以下规则,但我仍然能够访问
sub.example.com/login
,而不被重定向

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com/login$  [NC]
RewriteRule ^(.*)$ http://example.com/login$1        [L,R=301]

实际上,为了完全清楚,这里是我的整个.htaccess文件内容。也许其他人会发现我错过了什么

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# redirect subdomain login attempts to main domain
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com/login$  [NC]
RewriteRule ^(.*)$ http://example.com/login$1        [L,R=301]

将重定向子域登录重写条件和规则放在重写基线之后。这应该有助于解决您的问题。

我想我还应该提到,我已经尝试了这个特殊条件/规则组合位置的各种变化。。。我把它放在最上面,就在上的重写引擎的正下方,它现在的位置。。。最底层。重写模块的调试日志是怎么说的(对于apache 2.2,对于apache 2.4)?我已经查看了所有我能找到的日志,但我没有看到任何关于重定向或重写的提及。。。mod_rewrite logging是默认启用的,还是我需要做些什么来启用它?请按照我之前评论中的链接进行操作:您需要激活它们(
RewriteLogLevel 3
LogLevel alert rewrite:trace3
)。不,这也没有起作用。。。重写规则中的模式看起来正确吗?如果是这样的话,那么我倾向于肯定有别的什么东西在覆盖它。。。不知道在哪里,因为这是我能找到的唯一的.htaccess文件…RewriteCond%{HTTP_HOST}!example.com$[NC]RewriteRule^(.*)$[L,R=301]这应该可以。
RewriteEngine On
RewriteBase /

# Redirect all subdomains to example.com
RewriteCond %{HTTP_HOST} !^(.*)\.example\.com$ [NC]
# Redirect only bar & foo subdomains to example.com
#RewriteCond %{HTTP_HOST} !^(bar|foo)\.example\.com$ [NC]
RewriteRule ^ http://example.com/ [L,R]