Как сделать mod_rewrite перенаправление на относительный URL

Я пытаюсь добиться базового перенаправления URL для pretty-URLs, и из-за того, что изображения, CSS и т.д. также находятся в том же пути, мне нужно убедиться, что если к URL обращаются без косой черты, она добавляется автоматически.

Это прекрасно работает, если я помещаю абсолютный URL следующим образом:

RewriteRule ^myParentDir/([A-Z0-9_-]+)$ http://www.mydomain.com/myParentDir/$1/ [R,nc,L]

Но если я меняю его на относительный URL, чтобы не менять его каждый раз, когда я перемещаю вещи в папках, это просто не работает.

Вот что я пробовал, и все они не работают, или перенаправляют меня на фактический внутренний путь каталога сервера, например /public_html/... :

RewriteRule ^myParentDir/([A-Z0-9_-]+)$ ./myParentDir/$1/ [R,nc,L]

RewriteRule ^myParentDir/([A-Z0-9_-]+)$ myParentDir/$1/ [R,nc,L]

Какой правильный способ сделать URL перенаправление, чтобы если пользователь вводит что-то вроде:

http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir

он получал перенаправление (через HTTP 301 или 302):

http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir/

Спасибо.

EDIT: Добавлю еще несколько деталей, потому что это не кажется ясным. Допустим, я реализую галерею, и я хочу иметь красивые URL, используя mod_rewrite. Итак, я хотел бы иметь следующие URL:

http://www.mydomain.com/somedir/galleries/cats

который показывает миниатюры кошек, в то время как:

http://www.mydomain.com/somedir/galleries/cats/persian

который показывает одно изображение из миниатюр всех кошек, названное persian. Таким образом, на самом деле физическая структура каталогов и переписывание будет выглядеть следующим образом:

http://www.domain.com/somedir/gallery.php?category=cats&image=persian

Итак, что я хочу сделать, это поместить файл .htaccess в /somedir, который перехватывает все запросы, сделанные к /galleries и в зависимости от виртуальных подкаталогов, следующих за ним, использует их в качестве заполнителей при переписывании, с 2 правилами перезаписи:

RewriteRule ^galleries/(A-Z0-9_-]+)/$ ./gallery.php?category=$1 [nc]
RewriteRule ^galleries/(A-Z0-9_-]+)/+([A-Z0-9_-]+)$  ./gallery.php?category=$1&image=$2 [nc]

Теперь проблема в том, что скрипту галереи на самом деле нужны некоторые CSS, Javascript и изображения, расположенные по адресу http://www. domain.com/somedir/css, http://www.domain.com/somedir/js, and http://www.domain.com/somedir/images respectively.

Я не хочу жестко кодировать абсолютные URL, поэтому CSS, JS и изображения будут упоминаться с помощью относительных URL, (./css, ./js, ./images и т.д.). Таким образом, я могу переписать URL следующим образом:

RewriteRule ^galleries/[A-Z0-9_-]+/css/(.*)$ ./css/$1 [nc]

Проблема в том, что поскольку http://www.domain.com/somedir/galleries/cats является виртуальной директорией, вышеописанное работает только если пользователь набирает:

http://www.domain.com/somedir/gallaries/cats/

Если пользователь опустит косую черту, mod_dir не добавит ее, потому что на самом деле этой директории не существует.

Если я поставлю переадресацию с абсолютным URL, это работает:

RewriteRule ^galleries/([A-Z0-9_-]+)$ http://www.mydomain.com/subdir/galleries/$1/ [R,nc,L]

Но я не хочу, чтобы префикс URL был жестко закодирован, потому что я хочу иметь возможность поместить это на любой домен, который я хочу, в любой поддир, который я хочу, поэтому я попробовал это:

RewriteRule ^galleries/([A-Z0-9_-]+)$ galleries/$1/ [R,nc,L]

Но вместо этого он перенаправляет на:

http://www.mydomain.com/home/myaccount/public_html/subdir/galleries/theRest

что, очевидно, не то, что я хочу.

EDIT: Дополнительные пояснения

Решение, которое я ищу, заключается в том, чтобы избежать жесткого кодирования имени домена или путей к папкам в .htaccess. Я ищу решение, при котором, если я упакую .htaccess с остальными скриптами и ресурсами, где бы пользователь ни распаковал его на своем веб-сервере, он будет работать из коробки. Все работает, кроме этой проблемы с косой чертой.

Поэтому любое решение, включающее жесткое кодирование родительского каталога или пути веб-сервера в .htaccess, - это не то, что я ищу.

9
задан jbx 16 October 2011 в 11:13
поделиться