0

次のようなページページのURLがありますhttp://www.domain.com/tag/apple/page/1/

などのURLがhttp://www.domain.com/tag/apple/page/*2/存在しない、または存在しない場合は、これをメインタグページpage/2などのページにリダイレクトするコードが必要です。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が存在しない場合、メインのタグページにリダイレクトされますが、機能しません。

この問題を解決するためのヒントや解決策はありますか?

4

1 に答える 1

2

あなたの言っていることが理解できれば、( を使用してmod_rewrite) 書き換えられた URL のリストがあると言っています。それらのいくつかは存在し、いくつかは存在しません。存在しないものを新しいページの場所にリダイレクトしたいですか?

簡単に言えば、 内でそれを行うことはできませんhtaccess。を使用している場合mod_rewrite、書き換えられたページ名がコントローラ ファイルに渡され、書き換えられた URL が表示されるページ/コンテンツに変換されます。

私はあなたが PHP を使用していると仮定しているだけです。そうであれば、ほとんどの PHP フレームワーク (CakePHP、Drupal、LithiumPHP など) がこの問題を処理し、存在しないファイルのカスタム リダイレクトを処理できます。カスタム アプリケーションを作成している場合は、.htaccessファイルではなく PHP Web サイト内でリダイレクトを処理する必要があります。

これの非常に簡単な例は次のとおりです。

<?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();
}

?>
于 2012-10-02T12:58:40.540 に答える