Я пытаюсь добиться базового перенаправления URL для pretty-URL, и из-за изображений, 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/
Спасибо.
РЕДАКТИРОВАТЬ : добавление некоторых дополнительных деталей, потому что они не совсем понятны.
Допустим, я реализую галерею, и я хочу иметь красивые URL-адреса с использованием mod_rewrite.
Итак, я хотел бы, чтобы URL-адреса были следующими:
http://www.mydomain.com/somedir/galleries/cats
, который показывает миниатюры кошек, а:
http://www.mydomain.com/somedir/galleries/cats/persian
, который показывает одно изображение из миниатюр всех кошек по имени персидский.
Таким образом, на самом деле физическая структура каталогов и перезапись будут выглядеть следующим образом:
http://www.domain.com/somedir/gallery.php?category=cats&image=persian
Итак, я хочу поместить файл .htaccess в / somedir, который перехватывает все запросы к / galleries и, в зависимости от виртуальных подкаталогов, следующих за ним, использует их в качестве заполнителей при переписывании с двумя правилами перезаписи:
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 и Images, расположенные в http://www.domain.com/somedir/css, http://www.domain.com/somedir/js, и http://www.domain.com/somedir/images соответственно.
Я не хочу жестко кодировать какие-либо абсолютные 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
что явно не то, что я хочу.
РЕДАКТИРОВАТЬ: Дополнительные пояснения
Решение, которое я ищу, состоит в том, чтобы избежать жесткого кодирования имени домена или пути к папке в .htaccess. Я ищу решение, в котором, если я упаковываю .htaccess с остальными сценариями и ресурсами, где бы пользователь ни разархивировал его на своем веб-сервере, он работал из коробки. Все работает так, кроме этой проблемы с косой чертой.
Так что любое решение, которое включает в себя жесткое кодирование родительского каталога или пути веб-сервера в .htaccess любым способом, не является тем, что я ищу.