Эмм, .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
Ловушки:
- POSTing неудобен (не может перенаправить и сохранить POST, поэтому должен будет приземлиться «нормально», что сделает REFERER при последующих запросах бесполезным / false
- Реферер часто не отправляется
- Переключение на другую 'subAny' с любой другой 'subAny' невозможно при отправке REFERER
Более жизнеспособные решения:
- Постобработка каждого запроса скриптом на сервере, добавление точки (.) К каждой ссылке (href / src), которая начинается с '/'.
- Предыдущее можно сделать с помощью клиентского javascript, но это не рекомендуется, потому что все ссылки для поисковых роботов и браузеров с отключенным js прервутся
- Создайте настоящий поддомен, это просто хлопот.
Короче говоря, нет желаемых решений, кроме создания реальных поддоменов. Какую именно проблему вы пытаетесь решить, если вам нужно это решение с «фиксированным корневым путем»? Могут быть и другие, которые не доставляют столько хлопот.