Как удалить / drupal из URL-адреса в Drupal 7, когда установка находится в соответствующем подкаталоге

В Drupal 6 мне удалось успешно установить Drupal в подкаталог под названием drupal, а затем ссылаться на сайт без использования example.com/drupal. В Drupal 6, чтобы заставить это работать, я сделал следующее: - Создал файл .htaccess в корневом каталоге, где был создан / drupal. Содержимое файла было:

Options -Indexes
RewriteEngine On
RewriteRule ^$ drupal/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ drupal/$1

Обновлен файл drupal/sites/default/settings.php, чтобы $ base_url был определен как $base_url = 'http://example.com';

Когда я пытаюсь сделать то же самое для Drupal 7, может отображаться только первая страница, все страницы ужасно терпят неудачу (или отображают только первую страницу). Я также попытался раскомментировать строки RewriteBase в /drupal/.htaccess. Сначала я попробовал RewriteBase /drupal, а потом попробовал RewriteBase /. Но обе попытки не увенчались успехом. Мне никогда не приходилось делать это с D6, но я думал, что исключу это возможное исправление.

В настоящее время я тестирую новую установку Drupal 7 с использованием xampp (версия 1.7.4) с сайтом example.com в разделе htdocs (т.е. xampp / htdocs / example.com / drupal). Сайт Drupal 6 находится в той же установке xampp, но, конечно, с другим путем к каталогу (например, xampp / htdocs / d6example.com / drupal). Обратите внимание, что у меня также есть установка Drupal 6, работающая на производственном сервере, с измененным только значением переменной $ base_url.

Итак, как вы можете установить Drupal 7 в подкаталог, а затем запустить его из этого каталога, не имея имени каталога в URL-адресе? Примечание. Я устанавливаю Drupal 7 в подкаталог, поскольку он позволяет упростить обновление между новыми выпусками ядра Drupal 7.


person spots    schedule 19.04.2011    source источник


Ответы (3)


Попробуйте с этим:

RewriteEngine On

RewriteBase /example.com
RewriteRule ^$ drupal/ [L]

# rewrite rules for drupal files
RewriteCond %{DOCUMENT_ROOT}/example.com/drupal/$1 -f
RewriteRule ^(.*)$ drupal/$1 [L,QSA]

# rewrite rules for drupal paths
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ drupal/index.php?q=$1 [L,QSA]

Поместите этот файл .htaccess в каталог example.com. Вам не нужно изменять drupal7 .htaccess

person soju    schedule 20.04.2011
comment
К сожалению, вышеуказанное не работает вместе с изменением переменной $ base_url. На самом деле это хуже, чем то, что было у меня, поскольку удаляет форматирование темы Drupal. - person spots; 21.04.2011
comment
У меня это работает, попробуйте добавить RewriteBase в этот .htaccess и прокомментировать его в drupal .htaccess - person soju; 21.04.2011
comment
Учитывая, что это работает для вас, мне интересно, связано ли это с моей установкой или модулями, которые я включил. С тех пор я отключил pathauto и очистил все кеши. Но это не помогло. Возможно, это связано с тем, что я использую xampp. Таким образом, директива RewriteBase / фактически переводит меня на localhost (который, в свою очередь, направлен на localhost / xampp /). Я пробовал RewriteBase /example.com, но это тоже не работает. Что мне действительно любопытно, так это то, что все это работало для Drupal 6, но не работает для Drupal 7. Это заставляет меня думать, что они что-то изменили, чтобы повлиять на эту функциональность в ядре. - person spots; 21.04.2011
comment
Я также должен заявить, что у меня есть другой сайт, работающий в той же установке xampp с использованием Drupal 6. Таким образом, единственное отличие от сайта, который не работает, - это Drupal 7. - person spots; 21.04.2011
comment
Обновите свой вопрос, чтобы добавить подробную информацию о вашей структуре каталогов / путей - person soju; 21.04.2011
comment
Ты чемпион @soju !!! Ваш ответ сработал. Спасибо. :) Надо сказать, с нетерпением жду D8 с новым каталогом / core. Никакой этой чуши. Еще раз спасибо. - person spots; 21.04.2011
comment
@soju, я провел несколько тестов для каждой строки предоставленного вами решения, и кажется, что строка RewriteBase /example.com не требуется. Вам это кажется разумным? - person spots; 21.04.2011

На сервере Apache добавьте это в корневой файл .htaccess.

RewriteEngine на RewriteRule (. *) Drupal / $ 1 [L]

Обновите файл drupal settings.php (в каталоге / drupal / site / default /) так, чтобы строка $ base_url читалась так:

$base_url = 'http://www.example.com';
person tanguy    schedule 17.02.2012

Я ответил на очень похожий вопрос здесь: Две установки Drupal на тот же сервер Мой ответ на ваш вопрос такой же, я рекомендую отказаться от метода перезаписи в пользу метода виртуального хоста, как описано ниже (это просто отрывок из того, что я ответил в приведенной выше ссылке):

... Чтобы сделать это правильно, вы должны сначала ввести следующую строку (или не комментировать эту строку, ›если она уже существует):

NameVirtualHost *:80

Затем вы должны создать две записи виртуального хоста. Один будет похож на следующий:

<VirtualHost *:80>
ServerName your.url.fortheroot
ServerAlias alternate.url.fortheroot
DocumentRoot "/path/to/webroot"
</VirtualHost>

Следующая запись будет похожа на следующую

<VirtualHost *:80>
ServerName your.url.forthesubfoldertest
ServerAlias alternate.url.forthesubfolder
DocumentRoot "/path/to/webroot/test"
</VirtualHost>

...

Однако в вашем случае вам потребуется только одна запись виртуального хоста, а не две.

Кроме того, следует отметить, что если вы хотите обслуживать сайт из местоположения, НЕ находящегося в вашем корневом веб-каталоге, вам также понадобится

<Directory></Directory>

запись, чтобы сообщить Apache, какой доступ предоставить посетителям (ПРИМЕЧАНИЕ: в Linux пользователь Apache должен стать владельцем файлов [или разрешения должны быть установлены с помощью метода, который по-прежнему позволяет правам пользователя apache обслуживать файлы, если вы хотите избежать передача права собственности])

person MER    schedule 07.10.2013