簡體   English   中英

htaccess 404錯誤條件代碼為301重定向

[英]htaccess 404 error conditional code for 301 redirect

我的分頁網址看起來像http://www.domain.com/tag/apple/page/1/

如果不存在諸如http://www.domain.com/tag/apple/page/*2/的URL,或者page/2不存在,我需要代碼將其重定向到諸如http://www.domain.com/tag/apple/的頁面http://www.domain.com/tag/apple/這將是主要的標簽頁面。

我目前有以下代碼:

RewriteCond %{HTTP_HOST} !^http://www.domain.com/tag/([0-9a-zA-Z]*)/page/([0-9]*)/$
RewriteRule (.*) http://www.domain.com/tag/$1/ [R=301,L]

在此代碼中,如果URL不存在,則會重定向到主標記頁面,但它不起作用。

有沒有人提供如何解決這個問題的提示或解決方案?

如果我理解你在說什么,你說你有一個重寫URL列表(使用mod_rewrite ); 其中一些存在,其中一些不存在。 對於那些存在的那些,您希望將它們重定向到新的頁面位置嗎?

簡短的回答是,你不能在htaccess做到這htaccess 當您使用mod_rewrite ,您的重寫頁面名稱將傳遞到控制器文件,該文件將重寫的URL轉換為它應顯示的頁面/內容。

我只是假設你正在使用PHP,如果是這樣,大多數PHP框架(CakePHP,Drupal,LithiumPHP等)可以為你處理這個問題並處理不存在的文件的自定義重定向。 如果您有自定義編寫的應用程序,則需要在PHP網站內處理重定向,而不是在.htaccess文件中。

一個非常簡單的例子是:

<?php
function getTag($url) {
    if (preg_match('|/tag/([0-9a-zA-Z]*)/|', $url, $match)) {
        return $match[1];
    }
    return '';
}

function validateUrl($url) {
    if (preg_match('|/tag/([0-9a-zA-Z]*)/page/([0-9]*)/|', $url, $match)) {
        $tag = $match[1];
        $page = $match[2];
        $isValid = // your code that checks if it's a URL/page that exists
        return $isValid;
    }
    return false;
}

if (!validateUrl($_SERVER['REQUEST_URI'])) {
    $tag = getTag($_SERVER['REQUEST_URI']);
    header ('HTTP/1.1 301 Moved Permanently');
    header('Location /tag/' . $tag . '/');
    die();
}

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM