Использование относительных URL-адресов при использовании «чистых URL-адресов»?

#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 и для этого 🙂