#php #relative-path #clean-urls
#php #относительный путь #чистые URL-адреса
Вопрос:
Я направляю все запросы URL на передний контроллер. Запросы URL выглядят примерно так example.com/controller/action/etc
. Проблема в использовании относительных URL-адресов в программе. Это работает нормально, если в запросе URL-адреса есть только одна косая черта, но если их несколько, относительный URL-адрес становится битым.
В location example.com/controller
относительный URL other-controller
-адрес работает нормально, перенаправляя пользователя example.com/other-controller
.
В location example.com/controller/action
относительный URL other-controller
-адрес не работает, перенаправляя пользователя example.com/controller/other-controller
.
Любые рекомендации о том, как обойти это? Надеюсь, я смогу сделать это без использования абсолютных путей или какого-либо кода, генерирующего URL, каждый раз, когда я хочу создать URL-адрес в приложении.
В случае, если это имеет значение, в настоящее время я использую этот код .htaccess для перенаправления входящих запросов на передний контроллер:
# Point all to index.php except existing files
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
Ответ №1:
Вам нужно будет использовать абсолютные URL-адреса, чтобы делать то, что вы хотите, не глядя на текущий путь, по которому вы находитесь, и добавляя нужное количество ..
символов. Вам не нужно иметь домен для каждого из них, вы можете просто использовать URL-адреса, такие как /controller/action
и /other-controller/action
. Они будут работать для обоих контроллеров без проблем. Пример тега привязки:
<a href="/controller/action">Do something!</a>
В качестве примечания, часто люди пишут функции для генерации URL-адресов. Если вы используете фреймворк MVC, это может быть в форме добавления метода в модель и вызова функции get_absolute_url
, которая возвращает форму, о которой я упоминал выше.
Комментарии:
1. Открывающиеся сокращенные URL-адреса будут отлично работать. Единственная проблема была бы, если бы я сохранил приложение во вложенной папке в любой момент…
example.com/someapp/controller/action
2. Это правда, но вы могли бы использовать
mod_rewrite
и для этого 🙂