我试图使用输出缓冲来重写 PHP 中的 URL 。 最理想的情况是这样。 在源代码中, 我可以用 < code> example.com/ index. php? action=123; sa=456; sa2=789 code> 来重写 PHP 中的 URL, 但是当向浏览器输出时, 它会重新写为 < code> example.com/ 123/456//789 code > 。 它似乎有用, 但是当它进入“ sa2” 重写输出缓冲时, 时会偶尔断开, 浏览器看到的是一个空白的白页面。 当页面加载时, 它会用 gzip 启动输出缓冲, 然后用重回调来输出缓冲。 这是我的php/ hht 访问。
<?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.......
?>
. 处理重写的通道
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 输出缓冲问题, 我似乎找不到我做错了什么。 任何帮助都会非常感激 。