我希望能够在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]
有谁知道如何实现这一目标?
答案 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部分,并开始调整。