Apache htaccess重定向在co.uk域上不工作
以下是我的apache配置: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
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$)