Intereting Posts
Как изменить адрес отправителя конверта с помощью phpmailer? как изменить формат timestamp в mysql Laravel 5.1, определяющий текущую страницу для разбивки на страницы Использование значения Select Option для запроса базы данных Остановка кнопки «Назад» при открытии защищенных страниц? PHP: Как создать имена файлов в Юникоде PHP добавляет 45 минут к времени с помощью Loop Динамическое зависимое выпадающее меню с jquery-select2 Загрузите изображение или txt и автоматически добавьте его на веб-страницу. PHP-скрипт: код вредоносного JavaScript в конце Все серии на данной оси должны иметь один и тот же тип данных phpmyadmin отображает японские символы как кучу вопросительных знаков, даже если я устанавливаю кодировку и сортировку в utf8_unicode_ci Почему php's file_get_contents неправильно извлекает json-файлы из xkcd? Какая настройка вызывает чувствительные к регистру require_once пути? Могу ли я искать членов класса PHP и методы с помощью поиска vim «star»?

mod_rewrite VS относительные пути

Мой код mod_rewrite:

Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC] 

Эта структура размещена на моем пути к серверу /beta

Когда я размещаю URL-адрес http://mydomain.com/beta/download все работает переписыванием на реальный путь http://mydomain.com/beta/index.php?url=download

Проблема возникает с относительными путями. Когда я ввожу URL-адрес http://mydomain.com/beta/download/box переписывание происходит по http://mydomain.com/beta/index.php?url=download/box … но ….

Все мои относительные пути, такие как моя папка css, моя папка js, файлы изображений …. все с относительным путем в моей странице index.php, из-за моих относительных путей становится download/css , download/js , download/images .. . и т.д…

Я знаю, что эта проблема возникает из-за косой черты в пути «download /», но как я могу решить это, используя mod_rewrite в .htaccess?

Могу ли я предотвратить переписывание по относительным путям? Или даже на внутренних путях моего собственного домена?

Как я могу решить это БЕЗ изменения моих относительных путей к абсолютным путям?

благодаря

Related of "mod_rewrite VS относительные пути"

Добавьте <base href="yoururl.com/beta/"; /> <base href="yoururl.com/beta/"; /> в HTML-заголовок. Также добавьте RewriteBase / beta / в htaccess, если вы находитесь в этой подпапке

вы всегда должны использовать абсолютные пути для изображений css и т. д., играя с mod_rewrite, но простым решением может быть игнорировать css, js, изображения и отдых в RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]

 RewriteRule ((js|css|images)\/.*)$ /$1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)?$ index.php?url=$1 [L,NC] 

однако это может не сработать, если эти dir фактически зависят от текущего URL-адреса

Я протестировал тег, и нет необходимости указывать http: // Следующий код работал для меня:

 <base href="<?php echo dirname($_SERVER['PHP_SELF']);?>/" /> 

Сервер никогда не узнает, что запрос пришел через относительный или абсолютный путь, так что вы ничего не можете с этим поделать. Как указано в другом ответе, вы можете делать исключения, но поддерживать их все и т. Д. В какой-то момент станет PITA. 😉

Я всегда использую абсолютные пути, особенно при переписывании, поэтому я бы предложил именно это, это самый простой способ

Добавление строки:

 <BASE href="http://www.sitename.com/"> 

на мою страницу внутри <head> отлично работает для меня. Он может быть закодирован даже функцией PHP, чтобы автоматизировать это, поэтому вам не придется беспокоиться о копировании и вставке в других случаях.

Обновить:

 <?php $BaseDir = 'http://'.$_SERVER['SERVER_NAME'].substr($_SERVER["SCRIPT_NAME"], 0, strrpos($_SERVER["SCRIPT_NAME"],"/")+1); ?> <head> ... <BASE href="<?php echo $BaseDir; ?>"> ... </head>