2

ユーザー提供のコンテンツを使用して URL を生成します。

URL の 1 つに titleKikar Habusiness - émission du 2/12/12があり、それが URL に変換されました/url/Kikar+Habusiness+-+émission+du+2%2F12%2F12

404 に%2Fなります。URL から を削除すると、正常に動作します。

興味深いことに、私の PHP コード (Yii を使用) は通常、カスタム ページで 404 を処理しますが、これはデフォルトの Apache 404 を返します。

.htaccess の読み取り:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

私の Yii parseUrl の読み取り:

public function parseUrl($manager, $request, $pathInfo, $rawPathInfo) {
        if(preg_match('%^url/(\d+)%',$pathInfo,$matches)){
            $_GET['id'] = $matches[1];
            return 'url/view';
        }
        else if(preg_match('%^category/(\d+)%',$pathInfo,$matches)){
            $_GET['id'] = $matches[1];
            return 'category/view';
        }
        return false;
    }

私のURLスラッグジェネレーターは次のとおりです。

public static function slug($title){
        $title = ToolBox::trim($title,60,false);
        $title = urlencode($title);
        return $title;
    }

一部のコンテンツは非ラテン語 (ヘブライ語やアラビア語など) であるため、基本的な ASCII URL を使用できないことに注意してください。

4

2 に答える 2

4

これは Apache でよくある問題であり、幸いにも Yii とは関係ありません。

Apache は、エンコードされた URL 部分 %2F (/) および %5C (\) で検出された URL を自動的にブロックします。mod_proxy または mod_rewrite ルールにも到達しません。

環境に応じて、コードをあまり変更せずにこれを回避する方法がいくつかあります。

完全なリストと手順については、http ://www.jampmark.com/web-scripting/5-solutions-to-url-encoded-slashes-problem-in-apache.html を参照してください。

リンクがダウンしている場合の詳細情報
アクセスできる場合は、AllowEncodedSlashes ディレクティブを有効にできます。これは非常に古いセミセキュリティ修正であり、デフォルトではオフになっています。これで問題は回避されます。Apache 構成にアクセスできない場合は、他のソリューションを調べる必要があります。

于 2012-12-12T12:06:16.510 に答える