Назад | Перейти на главную страницу

Использование mod_rewrite для принудительного использования www в URL

У меня есть размещенный веб-сайт с разделом безопасной регистрации и покупки, который обеспечивает доступ к платному контенту. Проверка сертификата SSL не удастся, если URL-адрес не в форме www.domainname.com. Я искал использование правил mod_rewrite для перенаправления, если www не был найден в URL-адресе. Это работает, но затем перенаправление на защищенные страницы завершается ошибкой 500. Проверяя логи ssl_error, я вижу:

[Wed Jul 29 21:20:32 2009] [alert] [client xx.xx.xx.xx] /vservers/domainname/htdocs/.htaccess: RewriteEngine not allowed here, referer: http://www.domainname.com/index.php?option=com_content&view=category&id=2&Item=9

.htaccess мы попробовали:

#  mod_rewrite in use
RewriteEngine On

RewriteCond %{HTTP_HOST}   ^domainname.com               [NC]
RewriteRule ^(.*)          http://www.domain.com/$1  [L,R=301]

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

Как уже отмечалось, вы можете использовать RewriteEngine только в центральной конфигурации, но не в .htaccess. Поскольку ошибка заключалась не в том, что он не распознал RewriteEngine, вы можете быть уверены, что mod_rewrite установлен. В чем вы не можете быть уверены, так это в том, включен ли RewriteEngine для вашего виртуального хоста. Лучшее, что можно сделать, - это попробовать.

Если сайт, который вы размещаете, является динамическим, вы можете добавить код для проверки $ SERVER_NAME и соответствующего перенаправления, но это может потребовать слишком больших усилий, если у вас нет единого места, куда можно было бы добавить код.

В противном случае я бы сказал, что вы застряли в ожидании своего провайдера.

Если бы вы могли изменить свою центральную конфигурацию, вы могли бы сделать это легко, не устанавливая никаких дополнительных модулей и не используя mod_rewrite. Я обнаружил, что люди целыми веками пытаются использовать mod_rewrite, хотя есть более простые способы сделать что-то.

<VirtualHost *:80>
   ServerName example.com
   Redirect / http://www.example.com
</VirtualHost>

<VirtualHost *:80>
   ServerName www.example.com
   .
   .
   .
</VirtualHost>

Вы можете добавить дополнительные строки ServerAlias ​​к верхнему виртуальному хосту, если вам нужно более одного хоста для перенаправления.

Кажется, там нельзя использовать rewriteengine. Если вы не можете изменить конфигурацию apaChe, единственное, что вы можете попробовать, это удалить «RewriteEngine on» и ожидать, что mod_rewrite будет включен на всем сервере.

Если вы можете изменить конфигурацию apache, переместите туда RewriteEngine или добавьте «AllowOverride all»