> RewriteCond %{REQUEST_URI} ^/(files)/? ...
>В name2 почему-то вопхнулось только первая часть названия каталога. Однако в RewriteCond
>у нас явно указано "files" и ничего более.
А "/?" ни о чём не говорит?
Лично у меня нет никакого желания разбираться в хитросплетениях работы mod_rewrite, поэтому я решил эту задачу за 10 минут на PHP, почти ничего к "реврайту" не добавляя. Вот моё решение:
.htaccess
----------------------------------------------------------------
RewriteEngine on
RewriteBase <мой путь>
RewriteCond %{REQUEST_URI} (\.html|/)$
RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING}
----------------------------------------------------------------
index.php
----------------------------------------------------------------
<?php
header("Content-type: text/plain; charset=UTF-8");
echo '_GET = '; print_r($_GET);
$cats = array('files', 'content', 'foo', 'bar');
$defaultCat = 'content';
$path = ltrim($_GET['path'], '/');
if (preg_match('/\.html$/', $path)) {
$type = 'html';
$path = substr($path, 0, -5);
} elseif (preg_match('/\/$/', $path)) {
$type = 'dir';
$path = substr($path, 0, -1);
} else {
die("Oops! I don't understand this path: $path");
}
$subpage = explode('/', $path);
if (in_array($subpage[0], $cats)) {
$cat = array_shift($subpage);
} else {
$cat = $defaultCat;
}
echo "type = $type\ncat = $cat\nsubpage = "; print_r($subpage);
?>
----------------------------------------------------------------
Ввожу http://<мой домен>/<мой путь>/files/qq/ww.html?foo=bar, получаю:
_GET = Array
(
[path] => files/qq/ww.html
[foo] => bar
)
type = html
cat = files
subpage = Array
(
[0] => qq
[1] => ww
)
Ввожу http://<мой домен>/<мой путь>/filesFailed/qq/ww/ee/?foo=bar
_GET = Array
(
[path] => filesFailed/qq/ww/ee/
[foo] => bar
)
type = dir
cat = content
subpage = Array
(
[0] => filesFailed
[1] => qq
[2] => ww
[3] => ee
)
В общем - старик Оккам и принцип KISS рулят, как обычно :)
P.S. Люблю иногда такие задачки порешать...