Перенаправление с www на не-www не работает - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь установить перенаправление с www на страницу без www.Я нашел много инструкций, но мне чего-то не хватает.Tracerout от www и non-www идентичен, и он попадает на мой сервер, поэтому DNS сохраняется.

Вот мой файл apache2 conf:

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    ServerName mypage.com
    ServerAlias www.mypage.com
    DocumentRoot /var/www/mypage

    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>

    <Directory /var/www/mypage>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

, а вот мой файл .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

Кто-нибудь может увидеть, что мне не хватает?

1 Ответ

0 голосов
/ 22 июня 2019

Причина, по которой ваше правило перенаправления www на не-www, вероятно, не работает, заключается в том, что оно происходит после других правил с флагом L (что, конечно, означает прекращение обработки правил перезаписи). Вы могли бы рассмотреть следующую конфигурацию, которая ставит эту конкретную часть первой:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.php [L]
</IfModule>

Я хочу отметить пару вещей здесь.

  • Директива RewriteBase здесь не нужна, если только этот файл htaccess не находится в корне документа.
  • RewriteRule для не-www может использовать переменную %{REQUEST_URI} и просто переписать весь запрос.
  • Предполагая, что вы намеревались переписать весь URI в /index.php в последнем правиле, вы будете использовать для этого символ ^.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...