使用PHP实现Url Rewriter(URL重写)
本博客已搬家 地址:www.czhphp.com 所有更新都会在新博客进行 谢谢大家的支持!
项目主页:http://www.thyphp.com/friendly-url-is-it-really-needed.html
下载地址:http://cesars.users.phpclasses.org/browse/package/4231.html
URL Rewriter
Cesar D. Rodas <cesar@sixdegrees.com>
This class provides an easy mechanism to manage URL rewriting, avoiding to write and manage the ".htaccess" file.
Another issue is that you can use a personalized regular expression for create friendlies URL.
I. Basic Structure
<?php
require "url_rewriter.php"; 开源OSPhP.COM.CN
$url = new url_rewriter('example/');
$url->e404 = "error.php";
// regular expression rules goes here
$url->execute();
?>
II. Regular Expressions
The regular expression are simple a set of constants, variable, and optionals parts.
Example:
$country=array('Argentina','Brasil','Paraguay');
$url->add_rule("index.php","/[country]/{index.html}", array('country'=> $country) );
If the first rule give true, "index.php" will be executed. For that country must be "Argentina", "Brasil" or "Paraguay" (this is because we force with the third parameter. "Country" must be in $country), and must exist an "index.html" or nothing.
OsPHP.COM.CN
* /Paraguay/index.html : Match
* /Paraguay/ : Match
* /Paraguay/foo.html : Mismatch
The :numberX, where X is an identification, variable is an special variable that it must be numeric for match.
Example:
$country=array('Argentina','Brasil','Paraguay');
$url->add_rule("foo.php","/[country]/[str]-[:number1]-site{-[:number2]}.[ext]", array('country'=> $country,':number2' => 2) ); OsPHP.COM.CN
* /Paraguay/some_string-123-site.html : Match
* /Paraguay/some_other_string-123-site-456.html : Mismatch
* /Paraguay/some_other_string-123-site-2.html : Match
* /Paraguay/some_other_string-123-site-foo.html : Mismatch
III. Real life example
Steps for translate a page which is "foo.php?id=45" to its URL friendly mode.
OSPHP.COm.CN
* Download http://cesars.users.phpclasses.org/url_rewriter
* Edit url_handler.php
* Add a new rule
$url->add_rule("foo.php","/entry-[:number1].html");
* Change all your links
foo.php?id=45 for /entry-45.html
* Edit foo.php adding an extra header
<?php
$id = $urlVars['number1'];
//check if $id exist
if ($id not exist) $urlHandler->error404();
//handle request as you did before
?>
本博客已搬家 地址:www.czhphp.com 所有更新都会在新博客进行 谢谢大家的支持!