Как сопоставить абсолютный путь URI из «/xxx/ some.file» в «/something/xxx/some.file» с помощью .htaccesss

#.htaccess #mod-rewrite #coldfusion #rewrite

#.htaccess #mod-переписать #coldfusion #переписывание URL

Вопрос:

спасибо за вашу помощь; Я новичок во всем этом сопоставлении URL, однако я считаю, что это простая проблема…

Я переношу приложение ColdFusion с GoDaddy (который недавно отказался от поддержки ColdFusion) на CFDynamics.

У меня есть URL для моего нового root: cfd123.cfdynamics.com/lbc это мой каталог wwwroot, в который я поместил веб-сайт. (На самом деле это: D:Inetpubwwwrootlbc.comwwwroot но я не думаю, что это имеет значение)

Проблема в том, что все URI HTML: атрибуты href и src и т. Д. внутри сайта были написаны с использованием абсолютных путей: «/images/some.jpg «и т. Д. И теперь я хочу, чтобы они отображались на «cfd123.cfdynamics.com/lbc/images/some.jpg «.

Я полагаю, мне нужно сопоставить «/ something» с «/ lbc / something» везде, где на него ссылаются. Кажется, что это должно быть просто, просто сопоставьте ведущий «/» с «/ lbc /», и все готово.

Итак, я решил создать список типа «Псевдоним / / lbc /» и поместить его в свой файл .htaccess. Теперь я обнаружил, что псевдоним не разрешен в .htaccess. (Я думаю, что если бы у меня был доступ к httpd.conf, я мог бы использовать там псевдоним, но это общая среда хостинга, и у меня нет такого доступа.)

Итак, я подумал, что попробую переписать правила (все еще в файле .htaccess):

 RewriteEngine on
RewriteBase /lbc
RewriteRule ^/(.*)$ /$1 [L,R=301]
  

Безрезультатно. Итак, я не нахожу, что какие-либо очевидные вещи работают (и я даже не уверен, что сделал их правильно). Я не вижу никаких механизмов отладки, которые мне что-либо показывают (chrome просто показывает мне ошибки 404, которые можно было бы ожидать, когда файл не найден.)

И все это ново для меня и довольно быстро становится довольно сложным. Кто-нибудь может указать мне правильное направление?

Спасибо, Стив

ps Я могу позаботиться о директивах ColdFusion CFInclude, создав файл Application.cfc в каталоге wwwroot, содержащий приведенный ниже код, но это ничего не делает для различных HTML-ссылок по всей странице.

 <cfset this.name = "AbsoluteReference"/>
<cfset this.mappings = structNew() />
<cfset this.mappings["/"] = getDirectoryFromPath(getCurrentTemplatePath())/> 
  

Комментарии:

1. Это не вопрос программирования. Вероятно, это лучше подходит для ошибки сервера . Хотя вы все равно подходите к этому неправильно. Прекратите использовать абсолютные пути — если вы используете ./images , то у вас нет этой проблемы — и вам не нужно будет переключаться снова, когда вы получите правильную настройку домена (cfd123, скорее всего, будет лишь временным, а не местом последнего упокоения вашего сайта).

2. Извините, если ошибка сервера — лучшее место, я буду иметь это в виду. Я согласен с абсолютными путями… но это карты, которые я раздаю, и переделывать их все в относительные пути некрасиво. И я новичок в этом хостинг-провайдере и в том, как они работают. Оказывается, они анализируют заголовки хостов для маршрутизации трафика в соответствующий веб-корень; итак, как только я перебрал записи DNS в своем домене, чтобы указать на них, вместо того, чтобы тестировать его напрямую с доменом cfd123 (который не является временным, он просто никогда не будет использоваться), тогда все работаеткак и ожидалось. Итак, я решил без какой-либо дальнейшей работы. Спасибо.

Ответ №1:

Я могу сказать, что вы используете сервер Windows в CFDynamics

У меня есть URL для моего нового root: cfd123.cfdynamics.com/lbc это мой каталог wwwroot, в который я поместил веб-сайт. (На самом деле это: D:Inetpubwwwrootlbc.comwwwroot но я не думаю, что это имеет значение)

Это структура Windows «D:Inetpubwwwrootlbc.comwwwroot » итак, .htaccess не будет работать для перезаписи URL-адресов, поскольку в общей среде вы не сможете делать то, что вам нужно. Эти изменения должны быть внесены в IIS, а это не вариант. Если у вас есть Dreamweaver, вы можете выполнить массовую замену поиска для /images/ и заменить на /ibc/images/, а для ссылки сделайте href=»/ заменить на href=»/ibc/ .

Надеюсь, это поможет.

Комментарии:

1. Спасибо, Джон. Я знаю и понимаю, что вы говорите о сервере Windows. Их служба поддержки сообщила мне, что они поддерживают .htaccess. Немного покопавшись, я обнаружил, что они делают это через IIRF ( iirf.codeplex.com ) Подключаемый модуль фильтра перезаписи для IIS. Да, изменение всего кода по всему сайту возможно, однако я надеялся избежать этого, поскольку все работает прекрасно, и всегда можно внести ошибки, пропустить что-то и т.д. Казалось, проще переписать и т. Д.