帮助.htaccess中的动态RewriteRule

时间:2010-09-08 09:49:45

标签: apache .htaccess mod-rewrite url-rewriting

我想在.htaccess中使用RewriteRules来实现特定的url重写,但无法正确使用,可以使用somoene吗?

我正在尝试将路径(第一个和最后一个之间的所有内容)重写为一个查询字符串,将文件名重写为另一个

e.g:

http://domain.com/users/admins/testuser.html 
rewrites to
http://domain.com/index.php?path=users/admins&file=testuser

and

http://domain.com/home.html
rewrites to
http://domain.com/index.php?path=&file=home

and

http://domain.com/settings/account.html
rewrites to
http://domain.com/index.php?path=settings&file=account

修改: 非常感谢前两位回答者,他们都是很好的答案,但我无法确定使用哪一个! 解析php本身的路径有什么好处,反之亦然?

2 个答案:

答案 0 :(得分:2)

尝试此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((.+)/)?([^/]+)\.[^/.]+$ index.php?path=$2&file=$3

但为此可能更容易使用PHP’s parse_urlpathinfo

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$pathinfo = pathinfo(substr($_SERVER['REQUEST_URI_PATH'], 1));
var_dump($pathinfo);

现在您只需要此规则将请求重写为 index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index.php$ index.php

答案 1 :(得分:1)

试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((\w+/)*)(\w+)\.html$ index.php?path=$1&file=$3