0

出力バッファを使用して PHP で URL を書き換えようとしています。理想的には、これは私のソースではリンクをそのままにしておくことができますexample.com/index.php?action=123;sa=456;sa2=789が、ブラウザに出力すると次のexample.com/123/456/789ように書き換えられます。真っ白なページ。ページが読み込まれると、gzip で出力バッファーが開始され、次に rewrite コールバックで出力バッファーが開始されます。ここに私のphp/.htaccessがあります

<?php

if (!ob_start("ob_gzhandler"))
    ob_start();

// Handle Rewriting of URLs
RewriteURLs();

function RewriteURLs()
{
// rewrite URLS from output buffer
function rewrite($buffer)
{
    // pages
    $buffer = preg_replace('/index.php\?page=(.*?)/is', "page/$1", $buffer);
    // sub-sub-actions
    $buffer = preg_replace('/index.php\?action=(.*?);sa=(.*?);sa2=(.*?)/is', "$1/$2/$3", $buffer);
    // sub-actions
    $buffer = preg_replace('/index.php\?action=(.*?);sa=(.*?)/is', "$1/$2", $buffer);
    // actions
    $buffer = preg_replace('/index.php\?action=(.*?)/is', "$1", $buffer);
    // index.php removal
    $buffer = preg_replace('/index.php/is', "", $buffer);
    return $buffer;
}
// start for rewriting
ob_start('rewrite');
}

// rest of content/page loading.......
?>

書き換えを処理する .htaccess

Options +FollowSymLinks  
RewriteEngine on  
RewriteBase   /
# Rules for: pages
RewriteRule ^page/([-_!~*'()$\w]+)/?$  index.php?page=$1    [L,QSA]

# Rules for sub-sub-actions
# /{action}/{subaction}/{subsubaction}/
RewriteRule ^([-_!~*'()$\w]+)/([-_!~*'()$\w]+)/([-_!~*'()$\w]+)/?$ index.php?action=$1;sa=$2;sa2=$3

# Rules for sub-actions
# /{action}/{subaction}/
RewriteRule ^([-_!~*'()$\w]+)/([-_!~*'()$\w]+)/?$ index.php?action=$1;sa=$2

# Rules for: actions
# /{action}/
RewriteRule ^([-_!~*'()$\w]+)/?$  index.php?action=$1    [L,QSA]

これは、ますますPHP出力バッファの問題のように見えます。私が間違っていることを見つけることができないようです。どんな助けでも大歓迎です。

4

1 に答える 1

1

phpバージョンに基づいて、書き換え関数に送信されるバッファ文字列を使用すると、バッファ全体のチャンクのみを含めることができるため、このコードに注意してください(正規表現ロジックを壊します)。強制的にchuck_sizeオプションパラメータをゼロにする必要があります(phpバージョン5.4以下では、デフォルトのチャックサイズは4096バイトです)

ob_startに関するドキュメントをご覧ください。

http://es.php.net/manual/en/function.ob-start.php

これがおそらくこのコードが「時々壊れて」しまう理由です

于 2012-05-25T11:37:31.187 に答える