【问题标题】:.htaccess 301 redirect all pages but the homepage.htaccess 301 重定向除主页外的所有页面
【发布时间】:2020-03-11 10:15:06
【问题描述】:

我想 301 将 oldsite.com 重定向到 newsite.com 我想将所有页面重定向到新站点上的相同 URL,但主页除外。只有主页会转到单独的页面。

RewriteRule (.*) http://www.siteb.com/$1 [R=301,L]

所以我想做的是:

oldsite.com/article1 应该转到 newsite.com/article1

oldsite.com/article2 应该转到 newsite.com/article2

等等

但是我想要的

主页 oldsite.com 转到 newsite.com/old-site

我该怎么做?

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:

    尝试下面我们对根 url 和其他目录 url 使用单独的条件和规则。

    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{HTTP_HOST} ^www\.([^/]+).com$
    RewriteRule (.*) http://www.newsite.com/%1 [R=301,L]
    
    RewriteCond %{REQUEST_URI} !^/$
    RewriteRule ^(.*)$ http://www.newsite.com/$1 [R=301,L]
    

    【讨论】:

      【解决方案2】:

      您需要在这里重定向除主页之外的所有请求,因此请在主根.htaccess 尝试此操作:

      RewriteRule ^(.+)$  http://www.newsite.com/$1 [L,R=302]
      

      然后将主页重定向到特定页面,因此添加以下行:

      RewriteRule ^(.*)$  http://www.newsite.com/old-site [L,R=302]
      

      都是这样的:

      RewriteRule ^(.+)$  http://www.newsite.com/$1 [L,R=302]
      RewriteRule ^(.*)$  http://www.newsite.com/old-site [L,R=302]
      

      这个正则表达式^(.+)$ 将捕获除/ 之外的所有请求,然后另一个正则表达式^(.*)$ 将捕获对主页/ 的请求,但根据您分配的主页,您可以在第一个这样的请求之前将其除外,考虑index

      RewriteCond %{REQUEST_URI} !^/index  
      RewriteRule ^(.+)$  http://www.newsite.com/$1 [L,R=302]
      RewriteRule ^(.*)$  http://www.newsite.com/old-site [L,R=302]
      

      如果有查询字符串,您可以输入这些规则:

      RewriteCond %{QUERY_STRING} ^$
      RewriteRule ^(.*)$  http://www.newsite.com/old-site [L,R=302]
      RewriteRule ^(.+)$  http://www.newsite.com/$1 [L,R=302]
      

      所以,如果没有查询字符串只有主页,否则按原样重定向。

      注意:如果一切正常,请将 302 更改为 301 以获得永久重定向并确保在测试前清空浏览器缓存

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多