htaccess ทั่วไปเปลี่ยนเส้นทาง www ไปที่ไม่ใช่ www


484

ผมอยากจะเปลี่ยนเส้นทางไปยังwww.example.com example.comรหัส htaccess ต่อไปนี้ทำให้สิ่งนี้เกิดขึ้น:

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

แต่มีวิธีการทำเช่นนี้ในแบบทั่วไปโดยไม่ต้องเข้ารหัสชื่อโดเมน?


64
โปรดทราบว่าหากคุณไม่ใช้ www (หรือโดเมนย่อยอื่น ๆ ) คุกกี้ทั้งหมดจะถูกส่งไปยังทุกโดเมนย่อยและคุณจะไม่สามารถมีโดเมนย่อยที่ไม่ต้องใช้คุกกี้สำหรับการแสดงเนื้อหาแบบคงที่ซึ่งจะช่วยลด จำนวนข้อมูลที่ส่งไปมาระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ บางสิ่งที่คุณอาจเสียใจในภายหลัง: twitter.com/codinghorror/statuses/1637428313
Sam Hasler

3
อีกสิ่งที่ควรพิจารณาตรวจสอบให้แน่ใจว่าคุณได้ตั้งชื่อตามมาตรฐานโดยไม่มี www ในหน้าเว็บของคุณเพื่อหลีกเลี่ยงการทำซ้ำเนื้อหาที่อาจเป็นไปได้ นอกจากนี้หากคุณมี URL ที่แน่นอนในลิงก์ของคุณตรวจสอบให้แน่ใจว่าทั้งหมดไม่ใช่ www ด้วย
Jeremy Morgan

ในใจของฉันดีกว่าที่จะเก็บการเปลี่ยนเส้นทางที่ชัดเจนโดยเฉพาะอย่างยิ่งเมื่อคัดลอกการกำหนดค่าสำหรับโดเมนอื่นที่อาจต้องปรับแต่งที่แตกต่างกัน (โดเมน www จะดีกว่าในบางกรณี) weboptimizer.ch/2014/01/redirection-www
snowflake

เหตุผลใดที่โซลูชันนี้ใช้งานได้กับทุกกรณียกเว้น URL รูท ยกตัวอย่างเช่นdomain.comไม่ piont เพื่อdomain.comขณะdomain.com/page1ไม่เปลี่ยนเส้นทางไปdomain.com/page1
Jeff Solomon

หากคุณต้องการเปลี่ยนเส้นทาง www ไปที่ไม่ใช่ www ในขณะที่รักษาโปรโตคอล (HTTP หรือ HTTPS) ให้ดูคำถามที่เกี่ยวข้องนี้: เปลี่ยนเส้นทาง www ไปที่ไม่ใช่ www ในขณะที่รักษาโปรโตคอล HTTP หรือ HTTPS
MrWhite

คำตอบ:


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

เหมือนกับของ Michaelยกเว้นอันนี้ใช้ได้ผล: P


16
หากไม่ได้ผลคุณอาจหายไปRewriteEngine Onก่อนที่จะทำงาน
hendry

8
@Ben ฉันจะใช้สิ่งนี้ในสิ่งที่ตรงกันข้ามเพื่อเพิ่ม www ไปยังเว็บไซต์ที่ไม่ใช่ www ได้อย่างไร
anarkhos

18
มันเปลี่ยนเส้นทางไปยังhttp://www.domain.com/ http://domain.com//คุณควรเพิ่มไป/ งานนี้สำหรับฉันRewruteRule RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
Vladimir Prudnikov

13
ฉันมีปัญหาเดียวกันกับ Vladimir โดยมันเปลี่ยนเส้นทางไปhttp://domain.com//ด้วยเครื่องหมายทับสองชั้น ดังนั้นฉันทำRewriteRule ^(.*)$ http://%1$1 [R=301,L] และดูเหมือนว่าจะทำงานได้ไกล
bobfet1

5
โปรดใช้วิธีแก้ปัญหาต่อไปนี้แทนที่จะเขียนโปรแกรมใหม่มันเร็วกว่ามากในขณะที่ดูดีกว่า: stackoverflow.com/questions/1100343//
Birla

111

แต่ถ้าเราต้องทำสิ่งนี้เพื่อ http และ https ที่แยกต่างหาก:

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

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

2
www.example.com/ เปลี่ยนเส้นทางไปที่ example.com // มีวิธีใดที่จะลบเครื่องหมายทับหรือไม่
Bobby S

คำถามที่ดี. ฉันเดาวิธีแก้ปัญหาอย่างรวดเร็วจะใช้กฎเพิ่มเติม (เช่นสำหรับกรณีนี้เท่านั้น) ก่อนที่สิ่งเหล่านี้จะอธิบายไว้ข้างต้น ตัวอย่างเช่น RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www.example.com/$ [NC] RewriteRule ^(.*)$ http://www.example.com [R=301,L] ...
Andron

3
@BobbyS ผมใช้วิธีการแก้ปัญหาในบทความนี้ มันเปลี่ยนเส้นทาง www และ HTTP ไปไม่ใช่ www HTTPS /และยังจับต่อท้าย
totymedli

คุณจะได้รับเครื่องหมายทับ (เริ่มต้นที่ URL เส้นทาง) เท่านั้นหากคุณวางคำสั่งเหล่านี้โดยตรงในการกำหนดค่าเซิร์ฟเวอร์ (หรือ virtualhost) ในที่ที่.htaccessคุณไม่ควรจะได้รับการเชือดเป็นพิเศษ (โปรดทราบว่าหากคุณทำการเปลี่ยนเส้นทางนี้ในการกำหนดค่าเซิร์ฟเวอร์คุณอาจไม่ควรใช้ mod_rewrite เพื่อเริ่มต้นด้วย ... mod_alias แบบธรรมดาRedirectในคอนเทนเนอร์ vhost ที่เหมาะสมจะมีประสิทธิภาพมากกว่าและมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลง)
MrWhite

72

เปลี่ยนเส้นทางที่ไม่ใช่ wwwไปยังwww (ทั้ง: http + https)

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

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

4
@nightcoder นี่เป็นเพราะโซลูชันของฉันสำหรับการเปลี่ยนเส้นทางแบบตรงกันข้าม (จากที่ไม่ใช่ www ไปยัง www) ซึ่งตรงข้ามกับ Andron's
Dmitriy

2
หมายเหตุ: วิธีนี้อาจทำให้เกิดปัญหาหากคุณตั้งใจจะใช้ชื่อโดเมนย่อยเพื่อวัตถุประสงค์อื่น เช่น app.yourdomain.com จะถูกเปลี่ยนเส้นทางไปที่ www.app.yourdomain.com
Marty ZHANG

1
ตรงข้ามกับคำตอบของคำถาม
จอห์น

ฉันต้องเพิ่มRewriteEngine OnและRewriteBase /แต่ก็ใช้งานได้ดี
คิด

45

หากคุณต้องการทำสิ่งนี้ในไฟล์ httpd.conf คุณสามารถทำได้โดยไม่ต้อง mod_rewrite (และเห็นได้ชัดว่ามันจะดีกว่าสำหรับประสิทธิภาพ)

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

ฉันได้รับคำตอบที่นี่: /server/120488/redirect-url-within-apache-virtualhost/120507#120507


33

นี่คือกฎในการเปลี่ยนเส้นทาง URL URL ไปที่ไม่มี www:

#########################
# redirect www to no-www
#########################

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

นี่คือกฎในการเปลี่ยนเส้นทาง URL ที่ไม่มี www ไปยัง www:

#########################
# redirect no-www to www
#########################

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

โปรดทราบว่าฉันใช้การNEตั้งค่าสถานะเพื่อป้องกันการ apache หนีสตริงแบบสอบถาม หากไม่มีแฟล็กนี้ apache จะเปลี่ยน URL ที่ร้องขอhttp://www.example.com/?foo%20barเป็นhttp://www.example.com/?foo%2250bar


1
คุณสามารถเขียนโค้ดเพื่อเปลี่ยนเส้นทาง http เป็น https พร้อมกับเปลี่ยนเส้นทาง www ไปยังที่ไม่ใช่ www ได้หรือไม่
HYDER ALI

เปลี่ยน http: // เป็น https: // เพื่อบังคับให้เป็น HTTPS เมื่อมีการเปลี่ยนแปลง นอกจากนี้คุณจะต้องเพิ่ม http-> https แบบปกติสำหรับการรับส่งข้อมูลที่ไม่ได้ถูกเปลี่ยนเส้นทางโดยกฎเหล่านี้
diamondsea

11
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]

RewriteCondทุกอย่างจับในHTTP_HOSTตัวแปรหลังจากและบันทึกไว้ในwww.%1

RewriteRuleจับ URL โดยไม่ต้องชั้นนำและบันทึกไว้ใน/$1


1
sans leading "/"- ใน.htaccess(ตามที่ระบุในคำถาม) ไม่มีการนำ/หน้าดังนั้นรูปแบบไม่ตรงกันและการเปลี่ยนเส้นทางไม่เคยเกิดขึ้น (มีเพียงเครื่องหมายทับชั้นนำในบริบทของเซิร์ฟเวอร์หรือโฮสต์เสมือน) นอกจากนี้หากคุณมีคำสั่ง mod_rewrite หลังจากนั้นคุณจะต้องLตั้งค่าสถานะ
MrWhite

7

ลองสิ่งนี้:

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

หากโฮสต์เริ่มต้นด้วย www เราจะติดโฮสต์ทั้งหมดเข้ากับจุดเริ่มต้นของ URL จากนั้นให้ถอด "www" ออก


1
RoBorg โชคไม่ดีที่การตั้งค่าของคุณไม่ทำงานถ้าฉันลองทำเช่นนี้: example.com/hello/worldฉันสิ้นสุดที่นี่: example.com/hello/world/world ฉันต้องเพิ่มเครื่องหมายทับหลังจาก% {HTTP_POST} ใน First RewriteRule
deepwell

2
ฉันใช้ Apache / 2.2.9 (Unix) มันทำงานได้กับ www.website ซึ่งเปลี่ยนเส้นทางไปยังเว็บไซต์ แต่สำหรับต่อไปนี้: เว็บไซต์ / การทดสอบ -> ไปที่: websitetestฉันแก้ไขได้โดยการเพิ่มข้อผิดพลาดอีก / วินาที: เว็บไซต์ / ทดสอบ / nไปที่websitetest / n / n
deepwell

1
ปัญหาเดียวกับ @deepwell กับอันนี้
neemzy

ปัญหาที่ผู้อ่านก่อนหน้านี้มีเป็นเพราะสั่งเหล่านี้มีไว้สำหรับการตั้งค่าเซิร์ฟเวอร์ (หรือ vhost) .htaccessไม่ใช่ ในบริบทของไดเรกทอรี ( .htaccess) คุณควรเปลี่ยนคนแรกRewriteRuleที่อ่าน: RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [C,DPI](ต้องใช้ Apache 2.2.12+) โปรดสังเกตการเพิ่มเครื่องหมายทับและDPIธง (ทิ้งข้อมูลเส้นทาง) - เพื่อป้องกันส่วนของเส้นทาง URL ที่ดูเหมือนซ้ำกัน (ซึ่งอันที่จริง "เส้นทางข้อมูล") ตามที่ระบุไว้ในความคิดเห็นก่อนหน้านี้ อย่างไรก็ตามมีคำสั่งที่ง่ายกว่าดังที่กล่าวไว้ในคำตอบอื่น ๆ
MrWhite

7

กรอกตัวจัดการ WWW ทั่วไปให้เสร็จสมบูรณ์ http / https

ฉันไม่เห็นคำตอบที่สมบูรณ์ ฉันใช้สิ่งนี้เพื่อจัดการการรวม WWW

  1. ทั่วไป ไม่ต้องการข้อมูลโดเมน
  2. บังคับให้ WWW บนโดเมนหลัก: www.domain.com
  3. ลบ WWW บนโดเมนย่อย: sub.domain.com
  4. รักษาสถานะ HTTP / HTTPS
  5. อนุญาตให้แต่ละคุกกี้สำหรับโดเมน / โดเมนย่อย

โปรดแจ้งให้เราทราบว่ามันทำงานอย่างไรหรือถ้าฉันออกจากช่องโหว่

RewriteEngine On
RewriteBase /

# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove WWW. when subdomain(s) in host     
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]

คำถามเดิมถามว่าจะเปลี่ยนเส้นทางไปที่ไม่ใช่www คุณกำลังบังคับให้รวมของwww www
Vadim

6

อาจมีข้อมูลที่ผิดมากมายเกี่ยวกับการเปลี่ยนเส้นทาง htaccess ฉันพบ ก่อนอื่นตรวจสอบให้แน่ใจว่าไซต์ของคุณใช้งาน Unix โดยใช้ Apache และไม่ได้อยู่ในโฮสต์ Windows หากคุณคาดว่ารหัสนี้จะทำงาน

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างบรรทัดระหว่างแต่ละบรรทัดของข้อความ แต่ฉันได้เพิ่มช่องว่างพิเศษระหว่างบรรทัดดังนั้นจึงทำให้การแสดงผลไม่เป็นไรในหน้าต่างนี้)

นี่คือโค้ดตัวอย่างหนึ่งรหัสที่สามารถใช้เพื่อนำรุ่น www ของเว็บไซต์ของคุณไปยัง http: // version มีรหัสอื่นที่คล้ายคลึงกันซึ่งสามารถใช้ได้เช่นกัน


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

สำหรับโฟลเดอร์ย่อย


3

สำหรับผู้ที่ต้องการเข้าถึงเว็บไซต์ทั้งหมดโดยไม่ต้องมีคำนำหน้า 'www'

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

คุณแน่ใจว่าคุณเพิ่มลงในไฟล์ต่อไปนี้

/site/location/.htaccess 

ตัวอย่างนี้ไม่สมบูรณ์ - คุณไม่ได้ตั้งค่าprotosslตัวแปรสภาพแวดล้อม (นี่ไม่ใช่ตัวแปรมาตรฐาน / เซิร์ฟเวอร์) สิ่งนี้จะว่างเปล่าเสมอดังนั้นจะเปลี่ยนเส้นทางไปhttpเสมอ (ความคิดที่อยู่เบื้องหลังการตั้งค่าprotosslก่อนหน้านี้ในรหัสคือเมื่อคุณต้องการที่จะรักษาโปรโตคอลเมื่อเปลี่ยนเส้นทางอย่างไรก็ตามวันนี้คุณอาจจะเปลี่ยนเส้นทางไปhttpsตลอดเวลา)
MrWhite

3

ใช้. htaccess เพื่อเปลี่ยนเส้นทางเป็น www หรือไม่ใช่ www:

เพียงใส่บรรทัดของรหัสต่อไปนี้ลงในไฟล์ root .htaccess หลักของคุณ ในทั้งสองกรณีเพียงแค่เปลี่ยน domain.com เป็นชื่อโฮสต์ของคุณเอง

เปลี่ยนเส้นทางไปที่ www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^domain\.com [NC]
  RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>

เปลี่ยนเส้นทางไปที่ไม่ใช่ www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
  RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>

เปลี่ยน DOT เป็น => !!!


2

ฉันใช้กฎข้างต้นเพื่อ fwd www เป็นไม่มี www และทำงานได้ดีสำหรับหน้าแรกอย่างไรก็ตามในหน้าภายในที่พวกเขาส่งต่อไปยัง /index.php

ฉันพบกฎนี้ในไฟล์. htaccess ซึ่งเป็นสาเหตุของปัญหานี้ แต่ไม่แน่ใจว่าต้องทำอย่างไร ข้อเสนอแนะใด ๆ จะดี:

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

คุณต้องวางกฎการเปลี่ยนเส้นทางที่ไม่ใช่ www ก่อนที่จะอ้างถึง
Vladimir Jovanović

2

www เป็นไม่ใช่ www ด้วย https

RewriteEngine on

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

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2
RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]

หากคุณต้องการลบwwwทั้งสองhttpและhttpsใช้สิ่งต่อไปนี้:

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

การเปลี่ยนเส้นทางนี้ไม่ใช่ ssl

ถึง

และ SSL

ถึง

บน Apache 2.4.*คุณสามารถบรรลุนี้ใช้Redirectกับifสั่ง

<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>

2

ใช้: Javascript / jQuery

// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

หรือ. htaccess:

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

และวิธี PHP:

$protocol = (@$_SERVER["HTTPS"]    == "on") ? "https://" : "http://";

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
    header('Location: '.$protocol.'www.'.$_SERVER    ['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']);
    exit;
}

อาแจ็กซ์

$.ajax({
    type: "POST",
    url: reqUrl,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
        else {
            // data.form contains the HTML for the replacement form
            $("#myform").replaceWith(data.form);
        }
    }
});

1

วิธีเดียวที่ฉันจะได้ไปทำงาน ...

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

1

ถ้าคุณบังคับให้ www ใน url หรือบังคับใช้ ssl prototcol จากนั้นลองใช้รูปแบบที่เป็นไปได้ในไฟล์ htaccess เช่น:

RewriteEngine On
RewriteBase /

### บังคับให้ WWW ###

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

## บังคับใช้ SSL ###

RewriteCond% {SERVER_PORT} 80 
เขียนซ้ำ ^ (. *) $ https://example.com/$1 [R, L]

## บล็อก IP ###
ปฏิเสธคำสั่งอนุญาต
ปฏิเสธจาก 256.251.0.139
ปฏิเสธจาก 199.127.0.259

Apache สามารถฟังพอร์ตอื่นเช่น 81 ดังนั้นแทนที่จะRewriteCond %{SERVER_PORT} 80แนะนำให้ใช้การตรวจสอบที่เป็นสากลมากกว่านี้:RewriteCond %{HTTPS} off
Andron

1

คำตอบที่เลือกและวิธีแก้ปัญหาอื่น ๆ ที่นี่ทำให้ส่วนของ url after / ลดลงดังนั้นโดยพื้นฐานแล้วมันจะถูกเปลี่ยนเส้นทางไปยังโดเมนหลักอย่างน้อยสำหรับฉัน .. ดังนั้นฉันจึงเพิ่มตัวอย่างการทำงานที่เกี่ยวข้องกับเส้นทางแบบเต็มหลังจากเฉือน ..

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

1

แนวทางอื่นหากการกำหนดค่า. htaccess ไม่ใช่ตัวเลือกในอุดมคติ

ฉันสร้างเซิร์ฟเวอร์การเปลี่ยนเส้นทางแบบง่าย ๆ เพื่อการใช้งานสาธารณะ เพียงเพิ่มระเบียน A หรือ CNAME:

CNAME   r.simpleredirect.net
A       89.221.218.22

ข้อมูลเพิ่มเติม: https://simpleredirect.net


0

ฉันไม่แน่ใจว่าทำไมคุณต้องการลบ www แต่เวอร์ชันกลับจะเป็น:

# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]

และข้อดีของสคริปต์นี้คือ: ถ้าคุณมีสิ่งที่ชอบ test.whattimein.com หรือสิ่งอื่นใด (สิ่งแวดล้อมสำหรับการพัฒนา / ทดสอบ) มันจะไม่เปลี่ยนเส้นทาง U ไปสู่สภาพแวดล้อมดั้งเดิม


2
ควรรวมโดเมนย่อย www หรือไม่จริง ๆ แล้วเป็นเรื่องของความชอบส่วนบุคคลและสามารถขึ้นอยู่กับชื่อโดเมนและกลุ่มเป้าหมาย รหัสทั่วไปที่โพสต์ไว้ด้านบนสำหรับการเปลี่ยนเส้นทาง www ไปยัง none-www ยังรองรับสภาพแวดล้อมการทดสอบด้วยเช่นกัน พบโดเมนย่อย
MrWhite

1
คำถามนี้ไม่ตรงข้ามกับที่ผู้ใช้ถามซึ่งก่อให้เกิดมลพิษแก่โพสต์เท่านั้น
Vadim

0

สิ่งนี้ได้รับการอัพเดตเพื่อใช้งานกับ Apache 2.4:

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

การเปลี่ยนแปลงอย่างเดียวกับMichael'sคือการลบ[NC]ซึ่งสร้างข้อผิดพลาด "AH00665":

ไม่รองรับตัวเลือก NoCase สำหรับรูปแบบที่ไม่ใช่ regex '-f' และจะถูกละเว้น


คำตอบก่อนหน้านี้ไม่จำเป็นต้องมี "การอัปเดตเพื่อใช้งานกับ Apache 2.4" "คำเตือน" ที่คุณกำลังอ้างถึง (AH00665) เกี่ยวข้องกับคำสั่งอื่น (เช่นหากคุณมีสิ่งที่ต้องการRewriteCond %{REQUEST_FILENAME} !-f [NC]) การNCตั้งค่าสถานะสร้างความแตกต่างเล็กน้อยในข้างต้นอย่างไรก็ตามเหตุผลที่ควรใช้การNCตั้งค่าสถานะที่นี่เพื่อตรวจจับการรับส่งข้อมูล bot เล็กน้อยที่ (ไม่ถูกต้อง) ส่งชื่อโฮสต์ตัวพิมพ์ใหญ่
MrWhite

0

เพิ่มถ้า localhost ไม่ต้องเปลี่ยนเส้นทาง (เพื่อวัตถุประสงค์ในการพัฒนาในสภาพแวดล้อมท้องถิ่น) หากไม่ใช่โลคัลโฮสต์และ (ไม่ใช่ https หรือเป็น www) ให้เปลี่ยนเส้นทางไปที่ https และไม่ใช่ www

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} !localhost [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

โปรดอธิบายรายละเอียดรหัสของคุณเพื่อให้ OP เข้าใจวิธีการนี้ตอบคำถาม
RyanNerd

-2

สวัสดีคุณสามารถใช้กฎต่อไปนี้ในไฟล์ htaccess ของคุณ:

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

คำถามกำลังถามหาทางออก "ทั่วไป" ที่ไม่รวมชื่อโดเมน โซลูชันของคุณยังทำสิ่งที่ตรงกันข้ามกับสิ่งที่ถามไว้อย่างครบถ้วน (ไม่ใช่ www ถึง www, ไม่ใช่ www ถึงไม่ใช่ www) โดยไม่มีคำอธิบาย
MrWhite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.