.htaccess Удалить WWW из URL + каталогов

Похоже, что это не проблема для многих людей (читай: я не могу найти ответ), но я хотел бы обновить следующий код htaccess, чтобы не только удалить «www» из URL, но также и любые дочерние элементы. каталоги, к которым осуществляется доступ.

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

С этим, http://www.example.com/any/ разрешается нормально, но я хочу перенаправить на http://example.com/any/ как с рутом.

43

Решение

У меня была та же проблема (проблема с удалением ‘www’ из URL, которые указывают на подкаталог в домене дополнения), но после некоторой проб и ошибок это, кажется, работает для меня:

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

Другие решения

Код перенаправления как для не-www => www, так и для противоположного www => не-www. Нет жесткого кодирования доменов и схем в файле .htaccess. Таким образом, исходный домен и версия http / https будут сохранены.

APACHE 2.4 и новее

NON-WWW => WWW:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

WWW => НЕ WWW:

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

Примечание: не работает в Apache 2.2, где% {REQUEST_SCHEME} недоступен. Для совместимости с Apache 2.2 используйте приведенный ниже код или замените% {REQUEST_SCHEME} на фиксированный http / https.


APACHE 2.2 и новее

NON-WWW => WWW:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

… или более короткая версия …

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

WWW => НЕ WWW:

RewriteEngine On

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

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

… более короткая версия невозможна, потому что% N доступен только с последнего RewriteCond …

17

Я думаю, что вы близко, но попробуйте следующее:

# force non-www domain
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

Не знаю точно, что вы имеете в виду под подкаталогами, но это следует вашему примеру.

11

Я использовал это, и это сработало для меня

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

Пример: http://www.locphen.vn/he-thong-loc-nuoc-gieng.html -> http://locphen.vn/he-thong-loc-nuoc-gieng.html

1

Я использую этот код. Если у моего посетителя нет www в его URL, то это условие добавляет www с url, иначе нет необходимости добавлять www с url (потому что у него уже есть. :))

RewriteEngine On
RewriteCond %{HTTP_HOST}  !^www\.YOUR-SITE\.com$ [NC]
RewriteRule ^(.*) http://www.YOUR-SITE.com/$1 [L,R]
-1

Здравствуйте, код работает отлично, за исключением того, что он передается с www в URL с некоторым значением и косой чертой в конце он показывает параметр и значение в URL.


RewriteEngine On
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(!.(\.gif|\.jpg|\.png|\.swf|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [R=301,NC]
RewriteRule ^(.[^.*]+)\/$ ?jogar=$1 [NC]
Options -Indexes
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http:\/\/%1%{REQUEST_URI} [R=301,QSA,NC,L]
[/ NOEDIT]

-3
По вопросам рекламы [email protected]