我在写晋远信息网(www.geofuture.net)时没有考虑到URL如何面向搜索引擎优化,完成了以后才开始优化的。这时要考虑一方面要静态的URL,一方面要尽量保持原有的程序不变以便于以后维护,所以就采用url_rewrite的方法。下面是httpd.conf中相应的部分
DocumentRoot /home/geofuture
ServerName www.geofuture.net
ServerAlias *.geofuture.net geofuture.net *.cic123.com
DirectoryIndex index.files index.html index.php
RewriteEngine On
#RewriteLog logs/rewrite.log
#RewriteLogLevel 9
#RewriteRule / http://geofuture.vicp.net/ [L]
RewriteCond %{REQUEST_FILENAME} index.files [OR]
RewriteCond %{REQUEST_FILENAME} error.files [OR]
RewriteCond %{REQUEST_FILENAME} cat.files [OR]
RewriteCond %{REQUEST_FILENAME} area.files [OR]
RewriteCond %{REQUEST_FILENAME} info.files [OR]
RewriteCond %{REQUEST_FILENAME} topic.files [OR]
RewriteCond %{REQUEST_FILENAME} post.files [OR]
RewriteCond %{REQUEST_FILENAME} profile.files [OR]
RewriteCond %{REQUEST_FILENAME} userinfo.files [OR]
RewriteCond %{REQUEST_FILENAME} cert.files [OR]
RewriteCond %{REQUEST_FILENAME} revise.files [OR]
RewriteCond %{REQUEST_FILENAME} review.files [OR]
RewriteCond %{REQUEST_FILENAME} feedback.files [OR]
RewriteCond %{REQUEST_FILENAME} keyrank.files [OR]
RewriteCond %{REQUEST_FILENAME} rss.files
RewriteRule ^(.+?)\Q(.*)$ $1=$2 [N]
RewriteRule ^(.+?)ZZ(.+)$ $1&$2 [N]
RewriteRule ^(.+?)\.files(.*)$ $1.php$2 [N]
RewriteRule ^(.+?)\.php(/|&)(.+).html$ $1.php?$3 [L]
ErrorDocument 400 /error.php?status=400
ErrorDocument 401 /error.php?status=401
ErrorDocument 403 /error.php?status=403
ErrorDocument 404 /error.php?status=404
ErrorDocument 405 /error.php?status=405
ErrorDocument 408 /error.php?status=408
ErrorDocument 410 /error.php?status=410
ErrorDocument 411 /error.php?status=411
ErrorDocument 412 /error.php?status=412
ErrorDocument 413 /error.php?status=413
ErrorDocument 414 /error.php?status=414
ErrorDocument 415 /error.php?status=415
ErrorDocument 500 /error.php?status=500
ErrorDocument 501 /error.php?status=501
ErrorDocument 502 /error.php?status=502
ErrorDocument 503 /error.php?status=503
ErrorDocument 506 /error.php?status=506
我只把以内容为主的栏目优化了,至于登录和搜索等部分保持不变,因为这些部分也是搜索引擎不关心的。同时,一些常见的状态码(HTTP Status)也有相应的静态页面。上面只修改了外来请求的URL,而程序生成的URL通过下面的代码实现:
//-------------- セクション名 ---------------------- -------------
// アニメーション URL 改写成静态
function url_rewrite($buffer)
{
//return $buffer;
$search = array(
'.php',
'?',
'&',
'filesZZ',
'=',
'hrefQ',
) ;
$replace = array(
'.files',
'/',
'ZZ',
'files/ZZ',
'Q',
'href=',
);
preg_match_all('/href="/(index|error|cat|area|info|topic| post|profile|userinfo|cert|revise|review|feeback|keyrank| rss) .php(.*?)"/', $buffer, $match);
$url = str_replace($search, $replace, $match[0]);
$url = preg_replace(' /.files(.+?)(#.+?)?"$/', '.files\1.html\2"', $url);
return str_replace($match[0], $url) , $buffer);
}
?>
上の関数の数は、パブリック ファイルの領域に配置されます。その後、必要な拡張子として、
ob_start("url_rewrite"); これもオリジナルのプログラムでのみ変更が必要な場所です。これにはさらに問題があります。完了後に $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] を経由して、後からの静的 URL を取得できるだけです。すべては、起動 URL の代コードにすべて依存して修正一下にあり、元の URL を処理できます。したがって、私は迂回するメソッドを考えています: //---------- --- セクション名 -----------------------------------