Php 基于域的htaccess重写
我的项目有多个域,我想为其中一个域重定向100页。Php 基于域的htaccess重写,php,.htaccess,Php,.htaccess,我的项目有多个域,我想为其中一个域重定向100页。 现在我了解了如何为1个域设置条件 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页 我
现在我了解了如何为1个域设置条件
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]
这将重定向每个页面
如果您只需要100个特定页面,则必须逐个添加。与其他答案一样,我们也提供了答案 可能跳过标志将是最好的方法 看起来是这样的:
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]
这是怎么回事
RewriteRule.?-[S=100]
被忽略www.site1.com
源域编写100条规则,然后继续假设重定向后的页面名称与问题中所示的页面名称相同,则可以使用以下规则作为最重要的规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.site1\.com$ [NC]
RewriteRule .+ https://www.mypage.de/shop/$0 [R=301,NE,L]
请确保使用新的浏览器进行测试。在这种情况下,有很多场景需要执行,例如,您可以重定向每个页面,但特定页面除外,如下所示:
RewriteCond %{HTTP_HOST} ^(www\.)?site1\.com [NC]
RewriteCond %{REQUEST_URI} !^/(page1|page2|page3|whatever)
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]
但是,如果应该排除的页面数量很大,您可以创建目录,例如,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} !^/(page1|page2|page3|whatever)
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]
因此,在测试了一些建议之后,我不得不将条件添加到每个规则中以使其工作 因此,据我所知,如果目标是特定的,则不能为多个规则设置条件 因此,我对这个问题的解决方案如下所示。
谢谢你的建议
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]
非常感谢。我不确定这是否只适用于一个域或所有域。但无论如何,我需要能够重定向这100个特定页面,而不是所有页面。你的正则表达式没有意义
([^/d]+)/
->除字符d
@RonvanderHeijden外的所有字符都是正确的。对不起,现在还是早上。。答案已更新。删除你的-1:)是的,你更新了,但答案仍然不是OP想要的。这将重定向每个页面,OP要求100个特定页面。OP在评论中提到有100多个页面。这不包括在主要问题中。当我第一次写答案的时候,我什么都不知道@Ronvanderheijdena除了100个特定页面之外,还有其他不应该被重定向的页面吗?@RonvanderHeijden是的,有。你应该指定哪些页面数量大,然后根据这一点设置一个条件,答案不是OP想要的。这将重定向每个页面,OP要求100个特定页面。这是一个题名,题名说基于域的htaccess重写在我的答案开始时也做阅读假设。这是到目前为止的答案。而且。。。是这样吗?显示你的.htacces/部分。也许我能帮忙,很好。我发布了我的解决方案,效果很好。我只是希望避开额外的线路,但没关系。谢谢您的帮助,您可能错过了代码>(域名前加感叹号)S[kip]在本例中与否定一起使用。这意味着,若主机不在选中的域中,则do S=100(或其他数字),若忽略do-S=100并处理下一个规则[对于域www.site1.com]——以这种方式,对于任何您想要重写的规则,您只能对每个域名进行测试。