перемещение проекта в подпапку путает мой путь к скрипту и URL

Я занимаюсь разработкой веб-сайта на локальном сервере в корневой папке, проблема в том, что когда мой клиент сказал мне загрузить веб-сайт на свой сервер, он находится в подпапке. Таким образом, 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

Ваша помощь будет принята с благодарностью! Спасибо!

2

Решение

Если вы не можете / не хотите редактировать свой сайт, вам нужно будет отредактировать файл .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]
1

Другие решения

В файловых системах на основе Unix (на которых основан веб-путь), / в начале пути — это абсолютный путь к корневому уровню.

Для веб-адресов это означает, что он идет прямо в корневой каталог документа вашего веб-сайта.

Вам нужно будет удалить начало / из ваших атрибутов href

<link rel="stylesheet" href="assets/css/main.css">
0

По вопросам рекламы [email protected]