Чистые ссылки в drupal 7

Втр, 10/01/2017 - 20:28

Возникли проблемы со включением чистых ссылок на drupal 7( на drupal 6 все работало, менял версию) и с удивлением обнаружил, что непонятно как они на 7-ке работают.
В 6-ке все понятно - там в .htaccess прямо прописано правило
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Видим q=$1 - все ок.

В семерке же нет такой строчки - тогда как работают чистые ссылки? И почему могут не работать на сервере?

0 Спасибо

Комментарии

Аватар пользователя tlito
1 неделя 3 дня назад tlito #

Администрирование- Конфигурация - Чистые ссылки - "Включить чистые ссылки"
иногда в хтаксес надо раскомментировать строку # RewriteBase /
для переадресации запросов на index.php в хтаксес написано:

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^ index.php [L]
0 Спасибо
Аватар пользователя xakd
1 неделя 3 дня назад xakd #
tlito написал:
RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteCond %{REQUEST_URI} !=/favicon.ico

  RewriteRule ^ index.php [L]

НЕ надо говорить банальности, не новичок. Знаю я прекрасно, где и как включаются чистые ссылки. htaccess стоит стандартный от семерки, его не меняли. Покажите, где в этой строчке rewrite переменной "q"

0 Спасибо
Аватар пользователя bsyomov
1 неделя 3 дня назад bsyomov #

Если просто посмотреть в процесс bootstrap(начальной инициализации) Drupal 7, можно понять, откуда это берётся...
В частности, там есть такая конструкция: $_GET['q'] = request_path();
А берётся, возращаемое этой функцией значение, из $_SERVER['REQUEST_URI'].

В Drupal 6 uri брался напрямую из $_GET['q']

0 Спасибо
Аватар пользователя Studio VIZA
1 неделя 3 дня назад Studio VIZA #

Подпишусь ))

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #
Studio VIZA написал:
Подпишусь ))

Нет тут rewrite q. На сервер приходит "ЧИСТАЯ ССЫЛКА". /node/1
Все запросы под которыми нет существующего по настоящему файла, правилом
RewriteRule ^ index.php [L]
Отправляются на обработку в index.php
Далее через функции arg() ядра вы получаете аргументы URL, как если бы они были прописаны через q

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #

Что касается вопроса "как и откуда берется чистая ссылка" - через функцию url ядра и ее вариации
которая, если включены чистые ссылки, подставляет вместо внутреннего системного пути /node/1 последний объявленный для него алиас, если он есть, например /hello-world

0 Спасибо
Аватар пользователя xakd
1 неделя 3 дня назад xakd #
postgres написал:
Что касается вопроса "как и откуда берется чистая ссылка" - через функцию url ядра и ее вариации
которая, если включены чистые ссылки, подставляет вместо внутреннего системного пути /node/1 последний объявленный для него алиас, если он есть, например /hello-world

Не кажется, что у вас какая-то каша в голове. Зачем вы описали механизм алиасов, причем тут чистые ссылки, а? Если все работает со ссылками ?q=node/1 , но не работает с /node/1 с htaccess из семерки, а выводит 500-ю - вот проблема где.
Нашел я drupal_environment_initialize() - теперь надо понять, что там не нравится этому серверу

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #
bsyomov написал:
Если просто посмотреть в процесс bootstrap

там и объяснение есть:
// When clean URLs are enabled, emulate ?q=foo/bar using REQUEST_URI. It is
// not possible to append the query string using mod_rewrite without the B
// flag (this was added in Apache 2.2.8), because mod_rewrite unescapes the
// path before passing it on to PHP. This is a problem when the path contains
// e.g. "&" or "%" that have special meanings in URLs and must be encoded.

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #
xakd написал:
Если все работает со ссылками ?q=node/1 , но не работает с /node/1 с htaccess из семерки, а выводит 500-ю - вот проблема где.

Вы можете привести полный текст .htaccess?
Про 500 вы ничего не писали, поэтому приходится додумывать

0 Спасибо
Аватар пользователя xakd
1 неделя 2 дня назад xakd #

полный текст - стандартный htaccess из семерки. Если у вас семерка есть - посмотрите. Тут дело в сервере.

0 Спасибо
Аватар пользователя Studio VIZA
1 неделя 3 дня назад Studio VIZA #

Давайте хоть раз не ссориться.

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #

Ну и лог ошибок покажите

0 Спасибо
Аватар пользователя postgres
1 неделя 3 дня назад postgres #

никаких сор согласен. есть ошибка 500. дайте лог, если хотите помощи

0 Спасибо
Аватар пользователя sergeybelya
1 неделя 3 дня назад sergeybelya #

В ряде случаев помогает раскомментирование строки rewrite base

0 Спасибо
Аватар пользователя gun_dose
1 неделя 3 дня назад gun_dose #

99%, что в данном случае именно так. Недавно была подобная ситуация. Зависит от конфигурации сервера.

0 Спасибо
Аватар пользователя xakd
1 неделя 2 дня назад xakd #

Прикольно, это помогло. Раскомментировал    RewriteBase / и все наладилось. Спасибо.

0 Спасибо