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

Главные вкладки

Аватар пользователя xakd xakd 10 января 2017 в 23:28

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

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

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

Комментарии

Аватар пользователя tlito tlito 10 января 2017 в 23:46

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

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^ index.php [L]
Аватар пользователя xakd xakd 11 января 2017 в 2:04

tlito wrote:

RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteCond %{REQUEST_URI} !=/favicon.ico

  RewriteRule ^ index.php [L]

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

Аватар пользователя bsyomov bsyomov 11 января 2017 в 10:11

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

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

Аватар пользователя postgres postgres 11 января 2017 в 10:00

Studio VIZA wrote:

Подпишусь ))

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

Аватар пользователя postgres postgres 11 января 2017 в 10:15

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

Аватар пользователя xakd xakd 11 января 2017 в 11:02

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

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

Аватар пользователя postgres postgres 11 января 2017 в 11:03

bsyomov wrote:

Если просто посмотреть в процесс 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.

Аватар пользователя postgres postgres 11 января 2017 в 11:07

xakd wrote:

Если все работает со ссылками ?q=node/1 , но не работает с /node/1 с htaccess из семерки, а выводит 500-ю - вот проблема где.

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

Аватар пользователя xakd xakd 11 января 2017 в 15:59

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