Я пытаюсь добиться базового перенаправления 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, - это не то, что я ищу.