htaccess基于域重写

时间:2018-03-15 10:23:26

标签: php .htaccess

我的项目有多个域名,我想为这些域名中的一个重定向100页 现在我找到了关于如何为1个域设置条件的this post

RewriteCond %{HTTP_HOST} ^www\.site1\.com [NC] 
RewriteRule ^(.*)$ index.php?lang=it [NC,QSA] 
RewriteCond %{HTTP_HOST} ^www\.site2\.com [NC] 
RewriteRule ^(.*)$ index.php?lang=en [NC,QSA] 

我的问题是,如何设置100页呢? 我是否必须复制每个链接的条件?

我想做的是这个

RewriteCond %{HTTP_HOST} ^www\.site1\.com [NC] 
RewriteRule ^some   https://www.mypage.de/shop/some [R=301, L]
RewriteRule ^page   https://www.mypage.de/shop/page [R=301, L]
RewriteRule ^settings   https://www.mypage.de/shop/settings [R=301, L]

5 个答案:

答案 0 :(得分:2)

在这种情况下有很多场景要做,例如,您可以重定向除特定页面之外的每个页面,如下所示:

 RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC] 
 RewriteCond %{REQUEST_URI} !^/(page1|page2|page3|whatever)
 RewriteRule ^(.*)$   https://www.mypage.de/shop/$1 [R=301, L]

但是,如果应该排除的页面数量很大,您可以创建目录,例如new然后移动所有必须重定向到的文件,然后创建此规则

 RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC] 
 RewriteCond %{REQUEST_URI} !^/new/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}/new%{REQUEST_URI}  -f
 RewriteRule ^(.*)$ /new/$1 [L]

然后您可以添加此项以将包含new的任何URI重定向到该新位置:

  RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC] 
  RewriteCond %{REQUEST_URI} ^/new/
  RewriteRule ^(.*)$   https://www.mypage.de/shop/$1 [R=301, L]

因此代码应如下所示:

 RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC] 
 RewriteCond %{REQUEST_URI} !^/new/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}/new%{REQUEST_URI}  -f
 RewriteRule ^(.*)$ /new/$1 [L]
 RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC] 
 RewriteCond %{REQUEST_URI} ^/new/
 RewriteRule ^(.*)$   https://www.mypage.de/shop/$1 [R=301, L]

答案 1 :(得分:0)

RewriteRule ^(.*)$ https://www.mypage.de/shop/$1 [QSA]

这会重定向每一页。

如果您只需要100个特定页面,则必须逐个添加。像其他答案一样提供。

答案 2 :(得分:0)

可能跳过旗帜将是最好的方式。

看起来像这样:

RewriteCond %{HTTP_HOST} !^www\.site1\.com [NC]
RewriteRule  .?  -  [S=100]
RewriteRule ^some   https://www.mypage.de/shop/some [R=301, L]
RewriteRule ^page   https://www.mypage.de/shop/page [R=301, L]
RewriteRule ^settings   https://www.mypage.de/shop/settings [R=301, L]
.....
RewriteRule ^rule_for_100nd_page   https://www.mypage.de/shop/settings [R=301, L]

这是如何运作的。

  1. 如果忽略YES RewriteRule .? - [S=100]则不跳过100(S = 100)下一个RewriteRules,测试HOST
  2. www.site1.com源域编写100条规则并继续。

答案 3 :(得分:0)

假设您的重定向后页面名称与您在问题中显示的页面名称相同,则可以使用此类规则作为最重要的规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.site1\.com$ [NC] 
RewriteRule .+ https://www.mypage.de/shop/$0 [R=301,NE,L]

确保使用新的浏览器进行测试。

答案 4 :(得分:0)

因此,在测试了一些建议之后,我最终不得不为每条规则添加条件以使其正常工作。

据我所知,如果目标是特定的,则无法为多个规则设置条件。

所以我对这个问题的解决方案看起来像这样 感谢您的所有建议。

RewriteCond %{HTTP_HOST} ^www\.site1\.com [NC] 
RewriteRule ^some   https://www.site1.de/shop/some [R=301, L]

RewriteCond %{HTTP_HOST} ^www\.site1\.com [NC] 
RewriteRule ^page   https://www.site1.de/random/page [R=301, L]

RewriteCond %{HTTP_HOST} ^www\.site1\.com [NC] 
RewriteRule ^settings   https://www.site1.de/whatever/settings [R=301, L]