บังคับให้ HTTPS ด้วย. htaccess บนไซต์ด้วย Wordpress ในโฟลเดอร์ย่อย


1

ฉันไม่สามารถรับไฟล์. htaccess ของฉันให้ทำงานเพื่อบังคับให้รับส่งข้อมูล HTTPS

โครงสร้างเว็บไซต์ที่ฉันเห็นถ้าฉัน ftp กับผู้ให้บริการโฮสต์ของฉัน:

/
  domains
    mydomainname.com
      public_html
        blog
  • ไฟล์สำหรับเว็บไซต์ของฉันเริ่มขึ้นpublic_html( index.htmlฯลฯ )
  • ฉันมีการติดตั้ง WordPress blog
  • การตั้งค่า Wordpress ได้รับการตั้งค่าเป็น https: (การตั้งค่าทั่วไประบุhttps://www.mydomainname.com/blogว่าเป็น Wordpress URL)
  • ใบรับรอง SSL ทำงานได้ดีถ้าฉันไปที่โดเมน
  • เริ่มแรกมีเพียงหนึ่ง.htaccessในblogประกอบด้วย:

# BEGIN WordPress

RewriteEngine บน
RewriteBase / บล็อก /
RewriteRule ^ index.php $ - [L]
RewriteCond% {{REQUEST_FILENAME}! -f
RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule /blog/index.php [L]

# END WordPress

ทุกชนิดของบทเรียนที่ผมเห็นพูดถึงว่าฉันควรเพิ่มนี้ไปยังจุดเริ่มต้นของ.htaccess:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.mydomainname.com/$1 [R,L]

.. และฉันควรวางไฟล์นี้ไว้ในรูทของเว็บไซต์ของฉัน

หากฉันไม่มี.htaccessไฟล์(อื่น ๆ ) :

  • ฉันสามารถเรียกดูไปที่https://www.mydomainname.comตามลิงค์ไปยังบล็อก WP และเรียกดูได้ที่นั่น https ทั้งหมด:
  • หากฉันไปที่http://www.mydomainname.comติดตามลิงก์ไปยังบล็อก WP สิ่งเหล่านี้จะเปลี่ยนเป็น https:

ถ้าฉันวาง htaccess ที่แก้ไขแล้วในหลาย ๆ แห่งฉันจะได้รับปัญหาเช่น (ขึ้นอยู่กับ.htaccessเนื้อหา / สถานที่ที่ฉันพยายาม):

  • ถ้าฉันไปที่www.mydomainname.comมันเปลี่ยนเส้นทางไปhttps://www.mydomainname.comและฉันได้รับ "เซิร์ฟเวอร์ไม่พบ"; หรือ:
  • ไม่มีการบังคับจาก http: ถึง https:

คำถาม:

  • ควร.htaccessวางในmydomainname.comหรือpublic_html(เช่นโฟลเดอร์ใดที่เป็น 'รูทของเว็บไซต์ของฉัน' ที่มีชื่อเสียง)? ฉันลองทั้งคู่แล้ว
  • มันจะต้องยังอยู่ในblog? ถ้าเป็นเช่นนั้นพวกเขาจะต้องเหมือนกัน?
  • เนื้อหาที่เหมาะสมของ.htaccessไฟล์คืออะไร?

ฉันลองใช้งานรูปแบบต่าง ๆ แล้ว แต่ยังใช้งานไม่ได้ - เห็นได้ชัดว่าไม่ใช่รูปแบบที่ถูกต้อง

FWIW: ฉันถือว่าผู้ให้บริการโฮสต์ใช้ Apache ฉันไม่สามารถควบคุมการตั้งค่าได้


คุณจำไว้หรือไม่ว่าเบราว์เซอร์บางตัวทำการแคชเว็บเพจและ. htaccess อาจไม่สามารถเปลี่ยนเส้นทางได้อย่างถูกต้อง Chrome คลั่งไคล้เป็นพิเศษเกี่ยวกับเรื่องนี้ Shift-F5 ควรทำการโหลดซ้ำ แต่บางครั้งก็ใช้ไม่ได้และคุณต้องล้างแคชผ่านเมนู Chrome ฉันได้รับ stumbed รับเหมือนกันที่แน่นอนในการทำงานและเมื่อฉันลองมันในเบราว์เซอร์ที่แตกต่างกันและมันก็ทำงานได้ในที่สุดก็ตีฉันว่ามันเป็นแคชที่เล่นเทคนิคกับฉัน
LPChip

ความเป็นไปได้ที่โชคร้ายอีกอย่างหนึ่งคือผู้ให้บริการของคุณอาจไม่อนุญาต.htaccessหรือไม่อนุญาตคุณสมบัติที่เป็นไปได้ทั้งหมด สิ่งนี้เป็นจริงอย่างยิ่งกับโฮสติ้งที่ใช้ร่วมกันโดยที่เว็บไซต์ของลูกค้าหลายรายนั้นโฮสต์อยู่บนเซิร์ฟเวอร์เดียวกัน
jpaugh

@ LPChip ฉันรีสตาร์ทเบราว์เซอร์ (และฉันรอ)
Jan Doggen

@jpaugh ผู้ให้บริการของฉันอนุญาตให้ htaccess หนึ่งในหน้าสนับสนุนของพวกเขากล่าวถึงสามบรรทัดและวลี 'ในโฟลเดอร์หลักของเว็บไซต์ของคุณ'
Jan Doggen

@JanDoggen การรีสตาร์ทเบราว์เซอร์ไม่เพียงพอที่จะล้างแคช Shift + F5 ควรทำเช่นนั้น คุณอาจลองใช้เบราว์เซอร์อื่นซึ่งโดยปกติคุณจะไม่ใช้ หรือคุณสามารถลองล้างแคช นี่คือแอพที่ใช้งานได้สะดวก คำเตือน: ไม่เคยใช้มัน
jpaugh

คำตอบ:


1

ฉันจะโต้แย้งว่าคุณควรใส่ไฟล์. htaccess ใหม่ในโฟลเดอร์ public_html

ลองทำสิ่งต่อไปนี้ด้วย mod_rewrite ในไฟล์. htaccess ของคุณ

RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf or .htaccess context

สามบรรทัดเหล่านี้จะต้องเพิ่มลงในไฟล์. htaccess ในblogโฟลเดอร์ด้วยการแก้ไขRewriteRuleเพื่อให้สะท้อนถึงโฟลเดอร์ย่อยนั้น:

RewriteRule ^/?(.*) https://%{SERVER_NAME}/blog/$1 [R,L]

อาจเป็นประโยชน์ในการใช้ mod_ssl เพื่อบังคับ SSL กับSSLRequireSSL Directive:

คำสั่งนี้ห้ามการเข้าถึงยกเว้นว่า HTTP ผ่าน SSL (เช่น HTTPS) เปิดใช้งานสำหรับการเชื่อมต่อปัจจุบัน สิ่งนี้มีประโยชน์มากภายในโฮสต์หรือไดเรกทอรีเสมือนที่เปิดใช้งาน SSL สำหรับการป้องกันข้อผิดพลาดในการกำหนดค่าที่เปิดเผยเนื้อหาที่ควรได้รับการป้องกัน เมื่อคำสั่งนี้แสดงคำขอทั้งหมดจะถูกปฏิเสธซึ่งไม่ได้ใช้ SSL โปรดทราบว่าสิ่งนี้จะไม่เปลี่ยนเส้นทางไปยัง https ด้วยตัวเอง


นี่เป็นพื้นมัน ฉันได้เพิ่มสิ่งที่ยังต้องการที่จะทำเพื่อ htaccess ไฟล์ในโฟลเดอร์ย่อยบล็อก
ม.ค. Doggen

คุณสามารถส่งไฟล์ htaccess ของคุณจากไดเรกทอรีบล็อกของคุณได้ไหม
iamsmug

0

นี่คือบทสรุปของบทความ Force HTTPS ในทุกหน้าของเว็บไซต์ WordPress ของคุณ อธิบายถึงวิธีการทำให้บล็อก WordPress ทั้งหมดปลอดภัยผ่าน HTTPS

  1. บังคับใช้ SSL สำหรับผู้ดูแลระบบและหน้าลงชื่อเข้าใช้
    เพิ่มบรรทัดต่อไปนี้ลงในwp-config.phpไฟล์ที่รูทของไดเรกทอรี WordPress ของคุณ:
    define('FORCE_SSL_ADMIN', true);

  2. ตั้ง https ในการตั้งค่า
    ในแดชบอร์ดผู้ดูแลระบบของคุณ WordPress ไปSettings -> Generalและเปลี่ยน URL ทั้งสองจะมีhttps://มากกว่าhttp://:
    ป้อนคำอธิบายรูปภาพที่นี่

  3. อัปเดต. htaccess
    เพิ่มกฎการเขียนซ้ำใน.htaccessไฟล์ที่อยู่ที่รูทของแอปพลิเคชัน WordPress:

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

มีการเพิ่มสองบรรทัดโดยระบุว่าหากพอร์ตปัจจุบันไม่ใช่ 443 ให้เขียน URL ใหม่เพื่อใช้ HTTPS ด้วยการเปลี่ยนเส้นทาง 301:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
  1. ล้างแคชทั้งหมดสำหรับแอปพลิเคชันของคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.