Я занимаюсь разработкой веб-сайта на локальном сервере в корневой папке, проблема в том, что когда мой клиент сказал мне загрузить веб-сайт на свой сервер, он находится в подпапке. Таким образом, URL был таким. http://example.com/myproject
Проблема с этим форматом заключается в том, что все мои вызовы css, js, ajax перепутаны, потому что, когда я пытался проверить консоль Firebug / chrome, я вижу http://example.com/assets/css/main.css
где на самом деле это должно быть http://example.com/myproject/assets/css/main.css
Все мои сценарии написаны так:
<link rel="stylesheet" href="/assets/css/main.css">
так как это прекрасно работает, когда проект не находится в подпапке.
Мой вопрос сейчас заключается в том, есть ли хитрость, может быть, в .htaccess или mod_rewrite, которая позволила бы мне сказать браузеру, что всегда добавляю / myproject во все мои вызовы скрипта?
Причина в том, что я не хочу менять все свои вызовы сценариев и добавлять /myproject/...
Это образец моего .htaccess:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Allow asset folders through
RewriteRule ^(fuel/modules/(.+)?/assets/(.+)) - [L]
# Protect application and system files from being viewed
RewriteRule ^(fuel/install/.+|fuel/crons/.+|fuel/data_backup/.+|fuel/codeigniter/.+|fuel/modules/.+|fuel/application/.+) - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [L]
# Prevents access to dot files (.git, .htaccess) - security.
RewriteCond %{SCRIPT_FILENAME} -d
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
</IfModule>
Options -Indexes
Ваша помощь будет принята с благодарностью! Спасибо!
Если вы не можете / не хотите редактировать свой сайт, вам нужно будет отредактировать файл .htaccess (или конфигурацию сервера) в корне документа сайта. Чтобы переписать все запросы на несуществующие файлы в подкаталог вашего проекта:
Например, что-то вроде:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myproject%{REQUEST_URI} -f
RewriteRule !^myproject/ /myproject/$0 [L]
Для всех запросов на файлы не в /myproject
подкаталог, который не существует, но существует в /myproject
подкаталог затем внутренне переписать запрос к /myproject
подкаталог.
Это предполагает, что ваш (под) сайт состоит из реальных файлов, которые существуют в файловой системе.
Это будет выглядеть так, как будто ваш проект размещен в корне документа. Вы могли бы перенаправить извне (R=301
) — но это приведет к тому, что каждая страница будет вызывать несколько перенаправлений, которых следует избегать!
Однако, будет ли это работать вообще, будет зависеть от того, что еще ваш клиент размещает на своем сайте.
Я думаю, что лучшим решением является редактирование ваших файлов.
ОБНОВИТЬ: Так как ваш сайт имеет передний контроллер (т.е. вы перенаправляете все запросы на несуществующие файлы через index.php
) тогда приведенные выше директивы не будут работать.
Однако, если клиент просто размещает сайт, который состоит из реальных файлов в файловой системе, то это, вероятно, можно упростить до:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^myproject/ /myproject/$0 [L]
В файловых системах на основе Unix (на которых основан веб-путь), / в начале пути — это абсолютный путь к корневому уровню.
Для веб-адресов это означает, что он идет прямо в корневой каталог документа вашего веб-сайта.
Вам нужно будет удалить начало / из ваших атрибутов href
<link rel="stylesheet" href="assets/css/main.css">