PHP: лучшее решение для разрыва ссылок в приложении mod_rewrite - PullRequest
1 голос
/ 29 марта 2010

Я использую мод перезаписи, чтобы перенаправить все запросы с несуществующими файлами / каталогами на index.php?url=*

Это, безусловно, самая распространенная вещь, которую вы делаете с mod_rewrite, но у меня есть проблема:

Естественно, если URL-адрес страницы «mydomain.com/blog/view/1», браузер будет искать изображения, таблицы стилей и относительные ссылки в «виртуальном» каталоге «mydomain.com/blog/view/».

Задача 1:

  • Является ли использование базового тега лучшим решением? Я вижу, что ни одна из PHP-фреймворков там не использует базовый тег, хотя.

  • В настоящее время у меня есть регулярное выражение, заменяющее все относительные ссылки, чтобы указать правильный путь перед выводом. Это нормально?

Задача 2:

Возможно, сервер не поддерживает mod_rewrite. Однако все общедоступные файлы, такие как изображения, таблицы стилей и сборщик запросов index.php, находятся в каталоге /myapp/public. Обычно mod_rewrite направляет весь запрос на /public, поэтому создается впечатление, что public на самом деле был корневым каталогом для всех пользователей.

Однако, если нет mod_rewrite, я должен указать пользователям на /public из корневого каталога с помощью вызова header(). Это означает, однако, что все ссылки снова разрываются, потому что внезапно все изображения и т. Д. Должны быть вызваны через /public/myimage.jpg

Дополнительная информация: при отсутствии mod_rewrite вышеупомянутый запрос будет выглядеть так: mydomain.com/public/index.php/blog/view/1

  • Каковы наилучшие решения для обеих проблем?

Редактировать / Дополнительный вопрос:

Есть ли способ сделать / public / base dir с использованием простого кода htaccess?

Ответы [ 3 ]

2 голосов
/ 29 марта 2010

Пишите приложение таким образом, чтобы оно не нуждалось в mod_rewrite для работы (за счет наличия «некрасивых» URL) Постепенно улучшайте его с помощью mod_rewrite для достижения желаемого результата. Это, вероятно, означает, что вам нужно хранить некоторую информацию о конфигурации базового пути в вашем приложении.

1 голос
/ 29 марта 2010

Я вообще не понимаю этих проблем. Да, это, безусловно, самая распространенная вещь, которую вы делаете с mod_rewrite, и все же с 2 условиями:

RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d

Итак, ничто не повредит вашим существующим изображениям.

Почему бы не использовать просто абсолютный путь , например /myapp/public/myimage.jpg, значит, никакой виртуальный каталог не повредит пути к изображениям?

0 голосов
/ 29 марта 2010

как насчет информации о пути? Вы можете использовать его без mod_rewrite

/ index.php / путь / к / другой / file.jpg

<?php
echo $_SERVER["PATH_INFO"]; // outputs /path/to/another/file.jpg
?>

В любом случае, если вы хотите узнать, поддерживается ли mod_rewrite вашим сервером:

<?php
echo "mod_rewrite : ".(!empty($_SERVER["REDIRECT_URL"])?"supported":"not supported");
?>

Тогда вы узнаете, является ли mod_rewrite решением или, может быть, path_info более подходит для вас, вы могли бы сделать вспомогательные функции, которые могли бы искать оба варианта.

...