使用301重定向重定向404将现有页面重定向到主页

时间:2017-03-16 09:22:34

标签: apache .htaccess redirect mod-rewrite

我刚刚重新开发了我的一个网站。结构发生了变化,因此我需要全局重定向目前仍在Google上排名的旧的不存在的页面(50个左右的页面),以重定向到我的新网站的主页

结构基本上已从页面改变 - 例如:

www.website.com/page1.php www.website.com/page2.htm www.website.com/page3.php ......等等

www.website.com/page1/ www.website.com/page2/ www.website.com/page3/ ......等等

经过一段谷歌搜索,我在SO

上遇到了这个solution

当我添加:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . / [L,R=301]

到我的.htaccess文件,对现有页面的重定向(到主页)有效 - 太棒了!

但是现在我的新网站(现有的)导航/侧面板中的每个链接也被重定向到主页。所以我无法浏览我的网站!

因此,例如,当我点击关于我们链接www.website.com/about-us/或我的其他50个页面中的任何其他页面时(无论它们的名称是什么),上面的301重定向解决方案会将我重新定向到家页面(如果那些页面不存在的话)。

我想全局重定向目前仍在Google上排名的旧的不存在的页面(50个左右的页面),以重定向到我的新网站的主页。 。不是我网站现有的链接。

这是为什么?我认为使用301方法的404重定向只会针对不存在的页面。

我做错了吗?

2 个答案:

答案 0 :(得分:2)

要将 /page.php 重定向到 / page ,您可以使用以下内容:

RewriteEngine on
RewriteCond %{ENV_REDIRECT_STATUS} !200
RewriteRule ^(.+)\.php$ /$1 [L,R,NE]

您可以将R更改为R = 301以使重定向成为永久性。

答案 1 :(得分:0)

规则应用如下

  1. 检查about-us是否与模式.匹配,是的。{/ li>
  2. 检查条件是否匹配,%{REQUEST_FILENAME} !-f。它是一个目录,所以是的,它不是一个文件。
  3. 一切都匹配 - >适用规则。
  4. 如果您不想要匹配目录,可以通过

    说明
    RewriteCond %{REQUEST_FILENAME} !-d
    

    所以完整的重写规则是

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . / [L,R]
    

    如果一切正常,您可以将R替换为R=301permanent redirect)。 从不使用R=301进行测试。