Когда один использует правило перезаписи, скажем:Переписать правила и базовый URL
RewriteRule ^foo/(.+?)/?$ index.php?type=foo&value=$1 [NC,L]
Клиент все еще видит это как URL server.dom/foo/bar/
(это не имеет никакого знания того, как эти URL, разрешаются внутри, которое, конечно, разумно).
Если на странице index.php
генерируется ссылка (<a href="baz">link</a>
), клиент будет интерпретировать это как server.dom/foo/bar/baz
. index.php
однако во многих случаях не имеет полного знания о том, откуда происходит исходный код ...
Первой идеей было передать глубину «виртуального» пути в качестве параметра. Таким образом, правило перезаписи будет что-то вроде:
RewriteRule ^foo/(.+?)/?$ index.php?type=foo&depth=2&value=$1 [NC,L]
В результате index.php
должен написать:
<base href="../../">
Или более формально depth
раз ..
(разделенных косой чертой). Однако в некоторых случаях .htaccess
не знает о глубине «виртуального» пути. Кроме того, можно заметить, что последний слэш (/
) в правиле перезаписи является необязательным, в зависимости от того, записана ли косая черта, глубина изменяется. Это приведет к увеличению числа RewriteRules
значительно ...
Каких хорошие/лучшие практики для решения этой проблемы относительной ссылки робастно (надежных, возможно, в том смысле, что двигающийся часть сайта не будет «перерыв» ссылка) ?
Вы пытаетесь эмулировать абсолютные пути родственниками? И вы знаете о RewriteBase и теге? –
Я бы сделал макрос C и создал расширение PHP, расположенное в '/ ext/YOUR_EXT_NAME' –
@MichaelLivach: Ну, не знаю« корень »веб-сайта, поэтому абсолютные ссылки не являются опцией ... –