У меня есть проект, работающий локально на WampServer. Это MVC-подобная структура; он переписывает URL-адрес на index.php?url=$1. Полный .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Когда я хочу отправить пользователя на другую страницу с помощью PHP location: <location>, это не делает это должным образом из-за перезаписи (все, хотя я технически всегда в index.php).
Например, если я нахожусь на http://localhost/project_name/controller/method/, и этот конструктор или метод контроллера пытается отправить мне:
-  header('location: another_controller/method');отправляет меняhttp://localhost/project_name/controller/method/another_controller/method/
-  header('location: /another_controller/method');отправляет меняhttp://localhost/another_controller/method/
Но я хочу, чтобы он пришёл мне так:
-  header('location: /another_controller/method');отправляет меняhttp://localhost/project_name/another_controller/method/
Теперь единственным решением, которое я нашел, является:
define('BASE_URL','http://localhost/project_name');
header('location: '.BASE_URL.'/another_controller/method/');
Но это не идеально, потому что это заставляет меня изменять эту константу BASE_URL при изменении имени домена или папки. Я мог бы также создать метод в моем BaseController, который создает абсолютные URL-адреса, но этот метод в основном просто добавит BASE_URL тоже.
  Примечание.. Такая же проблема не возникает с атрибутами HTML src и href, которые могут использовать относительные пути (без project_name папки в пути). Однако я не понимаю, почему. Потому что, если заголовок location заставляет браузер добавлять относительный URL-адрес к текущему местоположению, почему он не имеет такого же поведения при поиске файлов .css или .js.
Итак... для меня возникает несколько вопросов:
- Будет ли у меня эта проблема, если бы у меня были виртуальные хосты?
- Каков наилучший способ решить эту проблему?
- Лучше всего иметь полный абсолютный URL-адрес?
-  Почему атрибуты HTML srcиhrefне используют это поведение?
