Переписать правила и базовый 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 однако во многих случаях нет полного знания о том, откуда происходит URL-адрес …

Первой идеей было передать глубину «виртуального» пути в качестве параметра. Таким образом, правило перезаписи будет примерно таким:

RewriteRule ^foo/(.+?)/?$ index.php?type=foo&depth=2&value=$1 [NC,L]

В следствии, index.php следует написать:

<base href="../../">

Или более формально depth раз .. (разделены косой чертой). Однако в некоторых случаях .htaccess не знает о глубине «виртуального» пути. Кроме того, можно отметить, что последний слеш (/) в правиле перезаписи необязательно, в зависимости от того, была ли записана косая черта, глубина меняется. Это увеличит количество RewriteRules значительно …

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

1

Решение

Если вы используете красивые ссылки, я настоятельно рекомендую не использовать относительные ссылки. Вы можете использовать ссылки как:

<a href="<?php base(); ?>baz">link</a>

где base() функция определяется в некоторых config.php выводить /foo/,

Таким образом, ссылка будет разрешена на /foo/baz вместо /foo/bar/baz, Если вам нужно переместить ваш сайт на другой путь, просто обновите ваш base() функционировать внутри вашего config.php, Это то же самое, что делают многие фреймворки CMS, такие как WordPress или CakePHP.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]