htaccess проблема с перенаправлением с внутренних страниц - PullRequest
0 голосов
/ 06 февраля 2019

Когда я набираю http://mywebsite.com, мой сервер успешно перенаправляется на http://www.mywebsite.com, но когда я набираю http://mywebsite.com/page.php, он перенаправляется на http://www.mywebsite.com, а не на http://www.mywebsite.com/page.php.

Мой сервер - Apache, я использую эти строки для перенаправления с не-www на www в моем .htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(.*)\.mywebsite\.com$ [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]

Спасибо

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Я не рекомендую перенаправлять пользователей в .htaccess.Вы должны сделать это в файле конфигурации для виртуального хоста, если это возможно, используя временное перенаправление или постоянное, если необходимо, для посетителей, пришедших с порта, отличного от http (например, 80).

Это может выглядеть примерно так:

<VirtualHost *:80>
   ServerName mywebsite.com
   ServerAlias www.mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   Redirect / https://www.mywebsite.com/
</VirtualHost>

<VirtualHost *:443>
   ServerName mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   Redirect / https://www.mywebsite.com/
   ... SSL stuff
   .... your https config for mywebsite here, with SSLCertificate, I believe you need a separate one for without www, to redirect to www.
</VirtualHost>

<VirtualHost *:443>
   ServerName www.mywebsite.com
   DocumentRoot "/var/www/mywebsite.com"
   SSL STUFF****
</VirtualHost>

Тогда в .htaccess вам вообще не нужно ничего переписывать.

Я считаю, что проблема с другими ответами заключается в том, что вы переписывали расположение файла, когда оно должно быть в формате% {DOCUMENT_ROOT}% {REQUEST_URI}, поэтому у вас может быть обработчик ошибокотправив вас обратно на домашнюю страницу.Поэтому проверьте ваши журналы ошибок и журналы доступа.

0 голосов
/ 06 февраля 2019

Попробуйте так:

# Redirect non-www to www
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Или перенаправить HTTPS:

# HTTP OVER SSL
  RewriteCond %{HTTPS} !on
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
0 голосов
/ 06 февраля 2019

Я бы предложил следующее:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mywebsite\.com [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]

Я думаю, что ваше состояние было слишком строгим.Вы заканчивали это ($) слишком рано.

0 голосов
/ 06 февраля 2019

Я бы предпочел использовать это, если вы хотите добавить www в начале вашего URL, если его не существует:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
...