将mod_rewrite规则转换为PHP规则

时间:2012-04-09 19:58:55

标签: php wordpress .htaccess mod-rewrite

我希望能够在PHP中处理mod重写而不是我的.htaccess文件,这样当我有需要重新编写的自定义模块时,我不必重做.htaccess文件。

我想模仿WordPress执行其.htaccess的方式:

RewriteEngine On RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php/$1 [L,QSA]

我现在的.htaccess是这样的:

Options +FollowSymlinks
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# MBP Rules
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=module&prefix=$1&module_page=$2 [NC,QSA,L]
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=module&prefix=$1&module_page=$2&page=$3 [NC,QSA,L]
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/([0-9]+)/?$ /index.php?p=module&prefix=$1&module_page=$2&id=$3 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/?$ /index.php?p=$1 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=$1&s=$2 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/([A-Za-z-_]+)/([0-9]+)/?$ /index.php?p=$1&s=$2&id=$3 [NC,QSA,L]

有谁知道如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

我的方法是替换

RewriteRule ^(.+)$ /index.php/$1 [L,QSA]

使用

RewriteRule ^(.+)$ /index.php?path=$1 [L,QSA]

然后你必须做类似的解析和modrewrite所做的一切,但是你可以在$ _GET ['path']上使用preg_match自己做。即。

if (preg_match('/id/([0-9]*)', $_GET['path'], $matches)) {
    Do code;
}

答案 1 :(得分:1)

当然,让.htaccess文件看起来就像您拥有的第一个示例,并从那里构建脚本。

可能会写一些Router类来将请求路由到他们的位置,基本原理是将接收到的查询拆分为/,这会为您提供一系列URL部分,并开始调整。