Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于域的htaccess重写_Php_.htaccess - Fatal编程技术网

Php 基于域的htaccess重写

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页 我

我的项目有多个域,我想为其中一个域重定向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]
这是怎么回事

  • 测试主机如果没有跳过100(S=100)下一个重写规则如果是
    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]——以这种方式,对于任何您想要重写的规则,您只能对每个域名进行测试。