Как заставить поддомен www на обоих HTTPS и HTTP - PullRequest
0 голосов
/ 02 декабря 2010

По какой-то причине я не могу понять это правильно, я посмотрел много примеров здесь и на веб-сайте apache.Я пытаюсь заставить www.domain.com вместо domain.com ЛИБО http или https, но я не пытаюсь заставить https через http.

следующий код работает для всех соединений https, но http не будет перенаправлять на www.

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^ https://www.domain.com%{REQUEST_URI} [R=301]

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [R=301]

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Ваши правила, кажется, в порядке. Вы можете комбинировать их следующим образом:

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{HTTPS}s on(s)|
RewriteRule ^ http%1://www.example.com%{REQUEST_URI} [L,R=301]

Также обратите внимание на дополнительный флаг L , чтобы остановить процесс переписывания после применения этого правила.

1 голос
/ 02 декабря 2010
  1. Вам не нужна вторая директива RewriteEngine. Это может или не может быть причиной разбора, из-за которого второй набор правил не работает. Чтобы проверить, так ли это, попробуйте изменить порядок двух имеющихся у вас блоков.
  2. Хорошей практикой является использование L для изменения запросов, которые определенно являются последними. Итак, измените значение [R=301] на [R=301,L], как только оно появится.
  3. Во многом из-за стиля, я бы подумал об изменении директив RewriteRule на что-то вроде (используя http или https в зависимости от ситуации):

    RewriteRule ^(.*)$ <a href="http://www.domain.com" rel="nofollow">http://www.domain.com</a>$1 [R=301,L,QSA]

0 голосов
/ 27 февраля 2013

На случай, если кому-то еще понадобится ответ на этот вопрос.Используйте другой .htaccess.Получите руководство отсюда, я нашел его, и оно выглядит хорошо: http://www.farinspace.com/codeigniter-htaccess-file/

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    ### Canonicalize codeigniter URLs

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(welcome(/index)?|index(\.php)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Enforce www
    # If you have subdomains, you can add them to 
    # the list using the "|" (OR) regex operator
    RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC]
    RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]

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

    ###

    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

Помните, как только вы настроите файл htaccess CodeIgniter, вы захотите перейти в «/ system / application / config/config.php », найдите следующее:

$config['index_page'] = "index.php";

и измените его на:

$config['index_page'] = "";
...