апачское перенаправление от не www к www

Разъяснить все другие ответы:

+++++++++++++++++++++

DoStuff(a++);

эквивалентен:

DoStuff(a);
a = a + 1;

+++++++++++++++++++++

DoStuff(++a);

эквивалентен:

a = a + 1;
DoStuff(a);

+++++++++++++++++++++

DoStuff(a + 1);

эквивалентен:

b = a + 1;
DoStuff(b);

+++++++++++++++++++++

201
задан Simon Hayter 22 March 2017 в 11:19
поделиться

6 ответов

Использование механизма перезаписи - довольно тяжелый способ решить эту проблему. Вот более простое решение:

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

<VirtualHost *:80>
    ServerName www.example.com
    # real server configuration
</VirtualHost>

И тогда у вас будет еще один раздел с ServerName www.example.com для вашей реальной конфигурации сервера. Apache автоматически сохраняет все, что находится после / , при использовании директивы Redirect , что является распространенным заблуждением относительно того, почему этот метод не работает (хотя на самом деле он работает).

494
ответ дан 23 November 2019 в 05:02
поделиться
RewriteCond %{HTTP_HOST} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

Это начинается с переменной HTTP_HOST , которая содержит только часть имени домена входящего URL ( example.com ). Предполагая, что имя домена не содержит www. и точно соответствует вашему доменному имени, тогда в игру вступает RewriteRule. Шаблон ^ (. *) $ будет соответствовать всему в REQUEST_URI , который является ресурсом, запрошенным в HTTP-запросе ( foo / blah / index.html ). Он сохраняет это в обратной ссылке, которая затем используется для перезаписи URL с новым доменным именем (которое начинается с www ).

[NC] indicates case-insensitive pattern matching, [R=301] indicates an external redirect using code 301 (resource moved permanently), and [L] stops all further rewriting, and redirects immediately.

10
ответ дан 23 November 2019 в 05:02
поделиться

Попробуйте следующее:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*) http://www.example.com$1 [R=301]
2
ответ дан 23 November 2019 в 05:02
поделиться

Чтобы удалить www с вашего URL веб-сайта, используйте этот код в своем файле .htaccess :

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

Для принудительного www на вашем веб-сайте URL используйте этот код на .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]

, где YourSite.com необходимо заменить на ваш URL .

30
ответ дан 23 November 2019 в 05:02
поделиться
<VirtualHost *:80>
    ServerAlias example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
44
ответ дан 23 November 2019 в 05:02
поделиться

Я запустил это ...

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

Мне нужно, чтобы это было универсальным для 25+ доменов на нашем новом сервере, поэтому эта директива находится в моем файле virtual.conf в теге . (dir является родительским для всех docroot)

Мне пришлось немного взломать правило перезаписи, поскольку полный docroot выполнялся при сопоставлении с шаблоном, несмотря на то, что http: // httpd. apache.org/docs/2.2/mod/mod_rewrite.html говорит о том, что это только вещи после хоста и порта.

5
ответ дан 23 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: