我想在.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本身的路径有什么好处,反之亦然?
答案 0 :(得分:2)
尝试此规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((.+)/)?([^/]+)\.[^/.]+$ index.php?path=$2&file=$3
但为此可能更容易使用PHP’s parse_url
和pathinfo
:
$_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