使用htaccess将除特定404网址之外的所有404错误重定向到主页?

时间:2013-11-20 18:53:00

标签: regex apache .htaccess mod-rewrite redirect

我正在装修我的网站,其中有1000页;这需要更改网址。

  1. 我希望301永久重定向所有404错误到网站主页说www.domain.com除了一些特定的404网址。
  2. 我希望301永久性地将那些特定排除的404网址(在第1号中)重定向到另一个网址。
  3. 我尝试了以下代码:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/about-us0.html [NC]
    RewriteCond %{REQUEST_URI} !^/contact_us0.html [NC]
    RewriteRule ^(.*)$ /$1 [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$
    RewriteRule ^about-us0\.html$ "http\:\/\/www\.domain\.com\/about\.html" [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$
    RewriteRule ^contact-us0\.html$ "http\:\/\/www\.domain\.com\/contact\.html" [R=301,L]
    

    但是当我浏览www.domain.com/about-us0.html或www.domain.com/contact_us0.html时;谷歌浏览器说“这个网页有一个重定向循环”。

    我做错了吗?任何帮助将不胜感激。


    对于没有加载查询字符串的重定向:

    http://domain.com/prod/species.php?action=3&file_id=30
    

    http://domain.com/species-30.php
    

    http://domain.com/prod/species.php?action=3&file_id=101
    

    http://domain.com/species-101.php
    

    我做了类似这样的事情(下面),这样做很好。这有什么需要改变吗?

    RewriteCond %{QUERY_STRING} ^action=3&file_id=([0-9]+)$ [NC]
    RewriteRule ^prod/species\.php$ /species-%1.php? [R=301,L]
    

1 个答案:

答案 0 :(得分:0)

请尝试以下规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(about|contact).*?\.html [NC]
RewriteRule ^ / [R=301,L]

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule ^(contact|about)-us0\.html$ http://www.domain.com/$1.html [R=301,L,NC]