首先你应该定义你的 URLs!!!
像:
/blog
节目front page
/blog/1234
节目post 1234
/blog/date/2012
节目posts by year
/blog/date/2012/06
节目posts by year and month
/blog/date/2012/06/01
节目posts by year and month and day
等等...
第一个选项是将您定义的每个 URL 重写为 index.php。您的 index.php 只需处理提交的 GET 参数。
### Do only if rewrite is installed
<IfModule mod_rewrite.c>
### Start rewrite and set basedir
RewriteEngine on
RewriteBase /
### Rewrite only if no file link or dir exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
### Rewrite frontpage
RewriteRule ^blog$ /index.php?action=showfront [L,QSA]
### Rewrite post
RewriteRule ^blog/([0-9]+)$ /index.php?action=showpost_by_id&id=$1 [L,QSA]
### Rewrite posts by date
RewriteRule ^blog/date/([0-9]{4})$ /index.php?action=showposts_by_date&year=$1 [L,QSA]
RewriteRule ^blog/date/([0-9]{4})/([0-9]{2})$ /index.php?action=showposts_by_date&year=$1&month=$2 [L,QSA]
RewriteRule ^blog/date/([0-9]{4})/([0-9]{2})/([0-9]{2})$ /index.php?action=showposts_by_date&year=$1&month=$2&day=$3 [L,QSA]
### Rewrite posts by tag
RewriteRule ^blog/tag/([a-zA-Z0-9_-]+)$ /index.php?action=showposts_by_tag&tag=$1 [L,QSA]
</IfModule>
在 index.php 中测试: print_r($_GET); print_r($_POST);
第二种选择是重写所有 URL,您的 index.php 需要处理所有可能的 URL。因此,首先它需要一个类似于路由器的东西,它将传入的 URL 分成几部分,然后发送请求的页面或错误页面。我一开始会尝试这个血腥的学校。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php%{REQUEST_URI} [L]
</IfModule>
在 index.php 中测试:
print_r(explode('/', ltrim($_SERVER['PATH_INFO'], '/')));
print_r($_GET);
print_r($_POST);
第三种选择是使用 PHP 框架。框架可以帮助您快速编写代码。它为您提供了许多基类,例如路由器。(例如 ZendFramework、Flow3、Kohana、Symfony、CodeIgniter、CakePHP、yii 等)。这会让你更先进。
第四个也是最懒惰的选择是使用现成的软件,如 Wordpress。