我正在尝试/尝试创建自己的MVC。我真的想操纵网址。我试图获得几个参数来形成一个完整的URL。 我想转
http://example.com/?action=account&user=JohnDoe
到
http://example.com/account/JohnDoe
但我似乎无法使.htaccess文件正常工作:/
这就是我所拥有的
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-=_?]+)/?$ index.php?action=$1&user=$2 [NC,L]
当我转到http://example.com/account/JohnDoe
时,我收到404错误。
答案 0 :(得分:1)
你缺少一个参数,试试这个
RewriteRule ^([A-Za-z0-9 - ] +)/([A-Za-z0-9 - ] +)/?$ index.php?action = $ 1& user = $ 2 [NC, L]
答案 1 :(得分:1)
为什么不建立整个框架,而不是为特定的URL设置mod_rewrite规则?
mod_rewrite如下:
#URI PATH CONSTRUCTION
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /index.php?string=$1 [L,QSA]
</IfModule>
然后让你的index.php文件将$ _REQUEST ['string']拆分成一个数组,你可以测试该数组以将请求指向它需要去的地方
if (isset($_GET['string'])) {
//DEALS WITH GET PARAMETERS
if (strstr($_GET['string'],"?") !== false) {
$pos = 0;
$tailstr = substr($_GET['string'],$pos);
$endpos = strpos($tailstr, "?");
$endpos = $endpos + strlen("?");
$string = substr($_GET['string'],$pos,$endpos);
} else {
$string = $_GET['string'];
}
$path = explode("/",$_GET['string']);
}
//Depth to 5 levels
for ($i=0;$i<5;$i++) {
if (!isset($path[$i])) $path[$i] = null;
}
global $path;
您现在拥有一个包含URI
中各个元素的全局数组例如
http://example.com/account/JohnDoe
会给你:
$path[0] = 'account'
$path[1] = 'JohnDoe'
$path[2] = ''
$path[3] = ''
$path[4] = ''