У меня есть проект, работающий локально на WampServer. Это MVC-подобная структура; он переписывает URL-адрес index.php?url=$1
. Полный .htaccess
:Абсолютный URL-адрес из базовой папки с rewrite
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
.
Примечание: Та же проблема не возникает с src
и href
атрибутов языка HTML, которые можно использовать относительные пути (без project_name
папки в пути). Однако я не понимаю, почему. Потому что, если заголовок location
заставляет браузер добавлять относительный URL-адрес к текущему местоположению, почему он не имеет такого же поведения при поискеили .js
файлов.
Итак ... это поднимает несколько вопросов для меня:
- ли я эту проблему, если бы я имел виртуальные хосты?
- Каков наилучший способ решить эту проблему?
- Лучше всего иметь полный абсолютный URL-адрес?
- Почему атрибуты HTML
src
иhref
не разделяют это поведение?
Вы можете добавить код вашего файла htaccess с начала? –
@HarshSanghani Добавлено. – kgongonowdoe
не могли бы вы добавить RewriteBase/project_name/after RewriteEngine на –