htaccess重写或php url爆炸

时间:2014-03-08 18:51:58

标签: php apache .htaccess mod-rewrite

我正在尝试/尝试创建自己的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错误。

2 个答案:

答案 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] = ''