Использование перезаписи htaccess, чтобы подкаталог стал собственным корнем для запросов относительного пути root - PullRequest
1 голос
/ 06 июня 2010

Могу ли я использовать htaccess для захвата запросов из определенного подкаталога и заставить этот каталог использовать себя в качестве корневого каталога для любых запросов относительного корневого пути? Например, если у меня есть ...

http://www.example.com/subFIXED/subANY/restofpath

... где subFIXED - это всегда один и тот же каталог, subANY - любой непосредственный подкаталог subFIXED, и я хочу, чтобы перенаправление всех запросов href / src из любого файла в subANY использовало subANY в качестве «root» (вроде как субдомен), по сути, имея запросы корневого уровня, используйте его как уровень корневого каталога:

http://www.example.com/subFIXED/subANY/

Вместо этого:

http://www.example.com/

Я предполагаю, что могу поместить файл htaccess в subFIXED для обработки всех вызовов, поступающих из чего-либо из любой subANY, но не очень хорошо знаком с переписыванием htaccess, переменными и т. Д., Я не могу понять, как захватить какой Каталог subANY делает запрос корневого уровня, а затем использует этот захват для перезаписи, чтобы считать этот каталог корневым уровнем любых запросов относительного корневого пути от него.

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 06 июня 2010

Эмм, .htaccess? Надо полагаться на крайне ненадежный HTTP_REFERER, нет, спасибо.

Добавьте элемент в ваш HTML и все готово. http://www.w3schools.com/tags/tag_base.asp


Edit: относительно корня ("/ foo") также следует учитывать, поэтому после исправления относительных путей с помощью :

.htaccess (крайне ненадежно, поскольку переключение подпути почти невозможно, а HTTP_REFERER крайне ненадежно. Короче: не используйте)

RewriteCond %{HTTP_REFERER} ^.*://[^/]+/subFIXED/([^/]+)/
RewriteCond %{REQUEST_URI}  !^/subFIXED
RewriteRule ^(.*)$ /subFIXED/%1/$1 [R=301,L,QSA] //drop the R=301 if POSTing, but url will not show the 'correct' one in that case

Ловушки:

  1. POSTing неудобен (не может перенаправить и сохранить POST, поэтому должен будет приземлиться «нормально», что сделает REFERER при последующих запросах бесполезным / false
  2. Реферер часто не отправляется
  3. Переключение на другую 'subAny' с любой другой 'subAny' невозможно при отправке REFERER

Более жизнеспособные решения:

  1. Постобработка каждого запроса скриптом на сервере, добавление точки (.) К каждой ссылке (href / src), которая начинается с '/'.
  2. Предыдущее можно сделать с помощью клиентского javascript, но это не рекомендуется, потому что все ссылки для поисковых роботов и браузеров с отключенным js прервутся
  3. Создайте настоящий поддомен, это просто хлопот.

Короче говоря, нет желаемых решений, кроме создания реальных поддоменов. Какую именно проблему вы пытаетесь решить, если вам нужно это решение с «фиксированным корневым путем»? Могут быть и другие, которые не доставляют столько хлопот.

...