【问题标题】:Redirect 404 to search page重定向404到搜索页面
【发布时间】:2015-11-07 10:23:08
【问题描述】:

因为在谷歌网站管理员中我有 550.000 个未找到的页面 - 404 - 我想重定向到搜索页面。

对用户来说是用户犯规,需要去搜索页面,但对我来说真的很复杂,因为我需要从404 url​​中提取搜索词组:

这里有 2 种 404 错误的 url,需要重定向。

  • DOMAIN/movie/12298295-Iron-Man-3

    DOMAIN/serie/15108-The-Walking-Dead/seasons/3/episodes/10

当然,我需要提取电影或系列的JUST THE NAME,然后重定向到这个网址

  • DOMAIN/search?q=Iron-Man-3

    DOMAIN/search?q=The-Walking-Dead


这是部分 URL: “电影”只有 4 个部分:

  • DOMAIN - 确切地说,是网站的域名

    /movie/ - 根据内容类型(电影或连续剧)创建

    12298295- 是这个项目的 ID,可以是 - 1 - 到 无限

    Iron-Man-3 - 电影的名称(是我想要的)

对于“系列” - 与电影相同,但最后可以有更多部分,完整的 URL 可以是:(所有这些 url,对于没有 404 的普通页面,都可以)

  • DOMAIN/serie/15108-The-Walking-Dead/seasons/3/episodes/10 - 链接到剧集页面

    DOMAIN/serie/15108-The-Walking-Dead/seasons/3/ - 链接到某个季节页面

    DOMAIN/serie/15108-The-Walking-Dead/ - 链接到该系列的首页


请注意,我需要重定向这个 url,只要结果是 404 页面(ErrorDocument 404),因为所有页面都使用相同类型的 url。

这是我的实际 .htacces

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteCond %{THE_REQUEST} /index\.php [NC]
    RewriteRule ^(.*?)index\.php[^/] /$1? [L,R=301,NC,NE]

    RewriteCond %{THE_REQUEST} /index\.php [NC]
    RewriteRule ^(.*?)index\.php(?:/(.*))?$ /$1$2? [L,R=301,NC,NE]

    RewriteCond %{QUERY_STRING} ^q= [NC]
    RewriteRule ^busqueda\b /busquedas [R=301,L,QSA]

    # Redirect Trailing Slashes...
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

非常感谢您的帮助

【问题讨论】:

    标签: .htaccess mod-rewrite redirect url-rewriting rewrite


    【解决方案1】:

    以下内容适用于电影和连续剧:

    RewriteRule ^(?:movie|serie)/\d+-([^/]+) /search?q=$1 [R=301,L,NC]
    

    【讨论】:

    • NO - 此规则使用 -movie|serie 重定向所有 url,就像我在这个问题中所说的那样,许多其他类似的 url 都可以,例如 DOMAIN/movie/123-title ,可能会导致一个 404,因为这个条目被删除了,但是 DOMAIN/movie/456-title 是可以的,所以只有当结果是 404 时才需要重定向
    • @user5535624 在上述情况下,404 是由脚本触发的。它需要由脚本本身处理。 Apache 永远不会知道电影/连续剧是否存在于数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2023-03-27
    相关资源
    最近更新 更多