Не работают короткие URL?

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

Аватар пользователя axel axel 27 апреля 2006 в 21:18

В некоторых инсталляциях Drupal 4.6 возникает проблема с короткими ссылками. Симптомы: mod_rewrite установлен и включён, но Drupal cообщает при попытке включения коротких ссылок:

It appears your host is not configured correctly for Clean URLs. Please check for ModRewrite support with your administrator.

Если mod_rewrite действительно включён, то обычно помогает один из трёх способов:

  1. В .htaccess в настройках mod_rewrite добавить слэш

    так в оригинальном файле:

      # Rewrite current-style URLs of the form 'index.php?q=x'.
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    </IfModule>

    попробовать так:

      # Rewrite current-style URLs of the form 'index.php?q=x'.
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
    </IfModule>
  2. В .htaccess в настройках mod_rewrite указать Options All:
    <IfModule mod_rewrite.c>
      RewriteEngine on
      Options All
  3. В settings.php сайта включить короткие ссылки принудительно, добавив строку:
    $conf = array(
        'clean_url' => 1
      );

Не помогло? Тогда доктор выпишет направление в морг.

PS. Способы выше лечат следствие проблемы, а в чём причина? Кому не влом докопаться до истины - отпишитесь здесь Smile

Ссылки в тему:

[url]http://drupal.org/node/20804[/url] - сообщение об аналогичной проблеме

[url]http://drupal.org/node/15365[/url] - инфа о настройке clean url

Комментарии

Аватар пользователя borisvolfson@drupal.org borisvolfson@dr... 29 апреля 2006 в 19:15

Если приведенные способы не помогают есть последний и самый радикальный. Smile В базе надо ручками прописать Clean URLs. Для этого идем в таблицу variable и меняем значение строк clean_url и clean_url_ok на "i:1;" далее чистим кэш, то есть очишаем таблицу cache. Подобные действия лучше делать при уверенности, что .htacces настроены правильно. Делать их удобно при помощи расширения DBA.

Аватар пользователя axel axel 29 апреля 2006 в 22:44

Имхо это аналогично явному указанию в конфиге

$conf = array(
          'clean_url' => 1
        );

- это значение перекрывает установки БД. Вот кэш почистить точно не помешает.

--
Axel,
Darcs-репозиторий разработок для Drupal

Аватар пользователя Гость Гость (не проверено) 11 ноября 2006 в 13:20

у меня получилось, что названия модулей в Апаче и
модулей, указанных в .htaccess отличались - соответственно,

не работал, зато заработал

Аватар пользователя makkon makkon 9 декабря 2008 в 16:41

включиться то опция включилась после использования 3 метода, однако вот беда - после того, как пытаюсь перейти на любую страницу у меня

Not Found

The requested URL /node/add was not found on this server.
Apache/2.2.9 (Fedora) Server at drupal.cip.ru Port 80

Аватар пользователя stasroot stasroot 18 декабря 2008 в 23:41

Вопрос, возможно очень тупой... где находится этот самый файл .htaccess? Это он: /sites/default/files/.htaccess ?
Если это он то у меня в нем вот это:

SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
Options None
Options +FollowSymLinks

И больше там у меня ни чего нету. Однако больше ни где в своей инсталяции я не смог найти файлов .htaccess Такое поведение нормально?
mod_rewrite у меня включен и через phpinfo() отображается.
Посоветуйте как быть? Работаю на локалке под ОС SUSE11.
Drupal 6.8
Посмотрел свои предидущие инсталяции и выясил, что в корне есть у меня файл .htaccess и в нем находится это:

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
  ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1.
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600

  # Do not cache dynamically generated pages.
  ExpiresByType text/html A1
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # If your site can be accessed both with and without the 'www.' prefix, you
  # can use one of the following settings to redirect users to your preferred
  # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
  #
  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  #
  # To redirect all users to access the site WITHOUT the 'www.' prefix,
  # (http://www.example.com/... will be redirected to http://example.com/...)
  # uncomment and adapt the following:
  # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# $Id: .htaccess,v 1.90.2.1 2008/07/08 09:33:14 goba Exp $

Записал соотвтственно это в корень своего нового сайта, перегрузил апач, результат тотже...
После того как я поместил этот .htaccess в корень инсталяции сайта я попробовал как работает мой сайт с применением указанных выше рецептов, как первого, так и второго, так и третего, по отдельности и в разных комбинациях... сработал только третий метод, короткие УРЛы включились, но вот теперь вылазит ошибка 404.
Разбираемся дальше...
радикальный метод указанный в первом коментарии, тоже не помог, и поведение тоже идентично методу номер 3 указанному в статье.
Тут я подумал... Во время инсталяции модреврайт небыл установлен на апач.. его я установил после. и теперь вот проблемки такие.
В общем тоже пробую радикальный метод. Полная переустановка. А жаль...

Аватар пользователя MSGeek MSGeek 25 июля 2009 в 23:28

Вообще-то последнее замечание очень верное - в морг!

Почему WordPress работает с ними без малейших проблем, а на Drupal'е постоянно приходится входить с ним в какие-то интимные отношения?

Сделал второй сайт в поддиректории, долго мучался пока на просторах Интернета не заметил RewirteBase \ - все заработало. Но пойди найди этот совет среди кучи других, часто совершенно бессмыссленных?

Теперь обратил внимание на другой мой сайт, которые вне DocumentRoot основного сайта на вируальном хостинге. Уже несколько лет терплю все эти ?q=cra... Никакие советы просто не работают. Вообще. WordPress в такой же конфигурации работает замечательно из коробочки, Drupal - ни в какую!

Ну, чего делать??? В морг. Не меня ессессно, Друпала. Придется следующий сайт под WordPress делать.

И что поразительно, внятных обьяснений как работает ReWrite engine вообще нигде нет! Хоть под Microsoft беги. Неужто у всех работающих над ней такие проблемы с русским или английским?

Кстати, вот вам конфигурация, которая провернно не будет работать (если можете меня опровергнуть, буду разумеется счастлив):

Виртуальный или реальный хост
Главный сайт в /var/www/html
Второй сайт (который с проблемами) в /var/www/othersite (чтобы через первый сайт до него былоне добраться)

Если засунуть в /var/www/html/othersite, RewriteBase помогает, снаружи - нет. Да, Апаче кофигурация естественно подправления, чтобы второй каталог тоже распознавать и AllowOverrides