Apache htaccess重定向在co.uk域上不工作

Apache htaccess重定向在co.uk域上不工作,apache,.htaccess,mod-rewrite,redirect,virtualhost,Apache,.htaccess,Mod Rewrite,Redirect,Virtualhost,以下是我的apache配置: DocumentRoot "/www/public" <Directory "/www/public"> Options Indexes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> NameVirtualHost *:80 <VirtualHost *:80> Ser

以下是我的apache配置:

DocumentRoot "/www/public"

<Directory "/www/public">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

NameVirtualHost *:80

<VirtualHost *:80>
        ServerAlias www.domain.com domain.com
        DocumentRoot /www/public
        ServerName www.domain.com
</VirtualHost>

<VirtualHost *:80>
        ServerAlias www.domain.co.uk domain.co.uk
        DocumentRoot /www/public
        ServerName www.domain.co.uk
</VirtualHost>
DocumentRoot”/www/public
选项索引跟随符号链接
允许超越所有
命令允许,拒绝
通融
名称虚拟主机*:80
ServerAlias www.domain.com domain.com
DocumentRoot/www/public
服务器名www.domain.com
ServerAlias www.domain.co.uk domain.co.uk
DocumentRoot/www/public
服务器名www.domain.co.uk
以下是我的htaccess的外观:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteCond %{REQUEST_URI} !=/server-status
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.php [NC,L,QSA]
</IfModule>

重新启动发动机
重写条件%{HTTP\u HOST}^[^.]+\.[^.]+$
在上重写cond%{HTTPS}s^|
重写规则^http%1://www.%{http_HOST}%{REQUEST_URI}[R=301,L]
重写cond%{REQUEST_URI}=/服务器状态
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^/index.php[NC,L,QSA]

如果我访问
www.domain.com
domain.com
,或
www.domain.co.uk
一切正常。但是,当我访问
domain.co.uk
时,它不会正确重定向到
www.domain.co.uk
。似乎
co.uk
请求没有读取我的htaccess。

这是由于
www
添加规则中使用的正则表达式造成的。改为:

RewriteCond %{HTTP_HOST} ^[^.]+\.(?:[^.]+|co\.uk)$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

在测试此更改之前,请确保清除浏览器缓存。

解决方案是从以下位置更改HTACCESS:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$


这就是这个规则的问题。我以前有过它,但我不得不改变,因为有时我需要
subdomain.domain.com
,但它会重定向到
www.subdomain.domain.com
,这不起作用。我需要修改regex匹配以包含.co.uk,我猜额外的句点不匹配
subdomain.domain.com
domain.co.uk
都有3个由点分隔的组件。所以同一个正则表达式将无法区分它们。最好将其用作:
RewriteCond%{HTTP\u HOST}^(www | subdomain)\。[NC]
我已经发布了一个解决方案,它可以按照我的要求工作。谢谢你指出这个问题,但请不要将其作为解决方案发布,因为我在回答中已经指出了同样的问题。正如我所建议的,一旦发现问题,可以有许多正则表达式变体来解决问题。如果你愿意,我也会在我的答案中加入你的变体。
RewriteCond %{HTTP_HOST} (^[^.]+\.[^.]+$|^[^.]+\.co\.uk$)