高级.htaccess mod_rewrite从域到子目录

时间:2014-07-12 20:43:23

标签: .htaccess mod-rewrite redirect url-rewriting

我发现了一些类似问题的主题,但是没有任何运气可以修改答案以尝试满足我网站的要求。我有一个主域名,并重新编写规则以将www域重定向到非www域,映射如下:

primarydoamin.uk => primarydomain.uk
www.primarydomain.uk => primarydomain.uk

RewriteCond %{HTTP_HOST} ^primarydomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.primarydomain.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.primarydomain.uk$ 
RewriteRule ^(.*)$ primarydomain.uk/$1 [R=301,L] 

我的主机上有许多附加/映射域名,我想根据模式重写:

  1. drop' www'
  2. 重写到主域的子目录(句点'。'替换为短划线' - ')
  3. 仅在上述规则执行时,无法满足将www域重定向到非www域流量,例如:

    www.fishandchips.co.uk => primarydomain.uk/closed/fishandchips-co-uk
    www.mushypeas.com => primarydomain.uk/closed/mushypeas-com
    pukkapie.uk => primarydomain.uk/closed/pukkapie-uk
    
  4. 目前我正在复制并粘贴以下逻辑:

    RewriteCond %{HTTP_HOST} ^(www.)?fishandchips.co.uk$ 
    RewriteRule ^(.*)$ http://primarydomain.uk/closed/fishandchips-co-uk [R=301,L]
    

1 个答案:

答案 0 :(得分:0)

您的第一组规则可以恢复为:

RewriteCond %{HTTP_HOST} ^(www\.)?primarydomain.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.primarydomain.uk$ [NC]
RewriteRule ^ http://primarydomain.uk%{REQUEST_URI} [R=301,L]

对于你的第二套规则,我会尝试类似的事情:

# This one will work for domains with single extension like .com
RewriteCond %{HTTP_HOST} ^www\.([^\.]+)\.([^\.]+)$ [NC,OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)$ [NC]
RewriteCond %{HTTP_HOST} !primarydomain.uk$ [NC]
RewriteRule ^ http://primarydomain.uk/closed/%1-%2%{REQUEST_URI} [R=302,L]

# This one will work for domains with 2 extensions like .co.uk
RewriteCond %{HTTP_HOST} ^www\.([^\.]+)\.([^\.]+)\.([^\.]+)$ [NC,OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$ [NC]
RewriteCond %{HTTP_HOST} !primarydomain.uk$ [NC]
RewriteRule ^ http://primarydomain.uk/closed/%1-%2-%3%{REQUEST_URI} [R=302,L]

最后的%{REQUEST_URI}将确保传递来自该域的任何网址。

注意:请记住,这是一个未经测试的解决方案。它应该按预期工作,但它没有考虑到它的多级子域,你必须随时调整。

此外,我已将其设置为302而不是301,请使用302,直到您确认其完全正常工作,然后将其移至301,并确保您&#39} ;使用其他浏览器或清除缓存以确保您没有查看缓存重定向。