Как да премахнете /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