Score:1

ลบรูทต่อท้ายเว็บไซต์โดยอัตโนมัติ (ปัญหา)

ธง jp

ตามหัวข้อ เมื่อฉันป้อน URL ของเว็บไซต์ด้วยตนเอง (ตัวอย่างที่ส่วนท้ายของหัวข้อ) เครื่องหมายทับต่อท้ายที่ส่วนท้ายของโดเมนจะถูกลบออกโดยอัตโนมัติ ฉันถูกบังคับให้เปลี่ยนเส้นทาง SSL และเปิดใช้งาน Apache ModRewrite ใน .htaccess และนี่คือเนื้อหาไฟล์ (อย่างที่คุณเห็น มันสร้างอัตโนมัติจาก Prestashop CMS (1.7.x)):

    # ~~เริ่ม~~ อย่าลบความคิดเห็นนี้ Prestashop จะเก็บรหัสไว้นอกความคิดเห็นนี้โดยอัตโนมัติเมื่อ .htaccess จะถูกสร้างขึ้นอีกครั้ง
# .htaccess สร้างขึ้นโดยอัตโนมัติโดยโซลูชันโอเพ่นซอร์สอีคอมเมิร์ซของ PrestaShop
# http://www.prestashop.com - http://www.prestashop.com/forums
 
<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv HTTP_MOD_REWRITE เปิด
</หากโมดูล>
 
RewriteEngine เปิดอยู่
 
 
#โดเมน: www.example.com
กฎการเขียนซ้ำ - [E=REWRITEBASE:/]
RewriteRule ^api(?:/(.*))?$ %{ENV:REWRITEBASE}webservice/dispatcher.php?url=$1 [QSA,L]
 
# รูปภาพ
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/ p/$1/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ % {ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/ .+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0 -9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-] *)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [ L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a- zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1 $2$3$4$5$6$7$8.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
กฎการเขียนซ้ำ ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9] )(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/ $4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
กฎการเขียนซ้ำ ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9] )([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p /$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ %{ENV :REWRITEBASE}img/c/$1$2$3.jpg [L]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2.jpg [L]
# AlphaImageLoader สำหรับ IE และ fancybox
RewriteRule ^images_ie/?([^/]+)\.(jpe?g|png|gif)$ js/jquery/plugins/fancybox/images/$1.$2 [L]
 
#ผู้จัดส่ง
RewriteCond %{REQUEST_FILENAME} -s [หรือ]
RewriteCond %{REQUEST_FILENAME} -l [หรือ]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L]
</หากโมดูล>
 
แอปพลิเคชัน AddType/vnd.ms-fontobject .eot
แบบอักษร AddType/ttf .ttf
แบบอักษร AddType/otf .otf
แอปพลิเคชัน AddType/font-woff .woff
แบบอักษร AddType/woff2 .woff2
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|svg)$">
ส่วนหัวตั้งค่าการควบคุมการเข้าถึงอนุญาตแหล่งกำเนิด "*"
</FilesMatch>
</หากโมดูล>
 
#หากไม่ได้เปิดใช้โหมดการเขียนซ้ำ
เอกสารข้อผิดพลาด 404 /index.php?controller=404
 
# ~~end~~ อย่าลบความคิดเห็นนี้ Prestashop จะเก็บรหัสไว้นอกความคิดเห็นนี้โดยอัตโนมัติเมื่อ .htaccess จะถูกสร้างขึ้นอีกครั้ง

ตัวอย่าง:

 - www.example.com/contacts -> https://www.example.comcontacts [ผิด]   
 - example.com/contacts -> https://www.example.comcontacts [ผิด]
 - http://example.com/contacts -> https://www.example.comcontacts [ผิด]
   
 - https://example.com/contacts -> https://www.example.com/contacts [ตกลง]
 - https://www.example.com/contacts -> https://www.example.com/contacts [ตกลง]

ความช่วยเหลือใด ๆ ที่ชื่นชม

kz flag
โปรดใส่เนื้อหาของไฟล์ `.htaccess` ในคำถามของคุณ ไม่ใช่ลิงก์ภายนอก รวมถึงตัวอย่างที่เกี่ยวข้องด้วย มิฉะนั้น คำถามที่โพสต์จะไม่ใช่คำถาม
kz flag
"ฉันถูกบังคับให้เปลี่ยนเส้นทาง SSL" - หมายความว่าอย่างไร ที่นี่ที่ไหน? ดูเหมือนว่าจะไม่อยู่ในไฟล์ `.htaccess` ที่เชื่อมโยง อันที่จริง ดูเหมือนว่าจะไม่มี "การเปลี่ยนเส้นทาง" ในโค้ดที่คุณโพสต์ใช่หรือไม่ จากตัวอย่างของคุณดูเหมือนว่าอาจเป็นการเปลี่ยนเส้นทาง HTTP ไปยัง HTTPS ที่เป็นปัญหา (เช่น "SSL บังคับให้เปลี่ยนเส้นทาง" - อะไรก็ตามที่เป็น)
jp flag
@MrWhite ด้วย "บังคับให้เปลี่ยนเส้นทาง SSL" ฉันหมายถึงคุณสมบัติใน CMS ที่อนุญาตให้ใช้ SSL สำหรับหน้าเว็บไซต์ทั้งหมด คุณพูดถูก ใน .htaccess นั้นไม่มีการเปลี่ยนเส้นทาง SSL สำหรับคำขอ HTTP ทั้งหมด คุณคิดว่ามันอาจเป็นปัญหาหรือไม่? ฉันจะเพิ่มลงใน .htaccess ได้อย่างไร
Score:0
ธง kz

ตามที่กล่าวไว้ในความคิดเห็น ไม่มีอะไรในการกำหนดค่าที่คุณโพสต์ที่จะทำให้เกิดสิ่งนี้ ไม่มีการเปลี่ยนเส้นทางเลยในการกำหนดค่าที่คุณโพสต์ นี่อาจเป็นข้อผิดพลาดในการกำหนดค่าใน CMS (Prestashop) ของคุณ

ปัญหาดูเหมือนจะเกิดขึ้นกับการเปลี่ยนเส้นทาง HTTP เป็น HTTPS ซึ่งกำลังลบเครื่องหมายทับที่จุดเริ่มต้นของเส้นทาง URL (ตามหลังชื่อโฮสต์ทันที)

อย่างไรก็ตาม คุณอาจสามารถ "แก้ปัญหา" ปัญหานี้ได้โดยใช้การเปลี่ยนเส้นทาง HTTP เป็น HTTPS (และไม่ใช่ www ไปยัง www) ใน .htaccess - ซึ่งเกิดขึ้นก่อนที่ CMS ของคุณจะทำอะไรได้ ดังนั้น CMS ของคุณไม่จำเป็นต้องเปลี่ยนเส้นทางคำขอ

ตัวอย่างเช่น สมมติว่าคุณมีเซิร์ฟเวอร์มาตรฐานที่เหมาะสม โดยที่ SSL ได้รับการจัดการโดยแอปพลิเคชันเซิร์ฟเวอร์ (ไม่มีพร็อกซี SSL เช่น Cloudflare เป็นต้น) คุณสามารถทำสิ่งต่อไปนี้ที่ด้านบนสุดของ .htaccess ไฟล์ก่อนหน้า #~~เริ่ม~~ ความคิดเห็น

# เปลี่ยนเส้นทางที่ไม่ใช่ www เป็น www + HTTPS
RewriteCond %{HTTP_HOST} ^(example\.com) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# เปลี่ยนเส้นทาง HTTP เป็น HTTPS (คำขอที่เหลือ)
RewriteCond %{HTTPS} =ปิด
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

หมายเหตุ: ทดสอบครั้งแรกด้วยการเปลี่ยนเส้นทาง 302 (ชั่วคราว) เพื่อหลีกเลี่ยงปัญหาการแคชที่อาจเกิดขึ้น


อัปเดต:

ฉันพยายามเพิ่มบรรทัดที่คุณเขียนด้านบน แต่ไม่มีอะไรเปลี่ยนแปลง

นี่หมายความว่าคุณมี HTTP เป็น HTTPS ที่มีรูปแบบไม่ถูกต้องในการกำหนดค่าเซิร์ฟเวอร์เอง (ซึ่งดำเนินการก่อนหน้านี้ .htaccess)

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

หากนี่คือการกำหนดค่าจริงของคุณ แสดงว่าคุณไม่มีเครื่องหมายทับต่อท้าย URL เป้าหมาย! ซึ่งจะส่งผลให้เกิดการเปลี่ยนเส้นทางที่ผิดรูปแบบ (ไม่มีเครื่องหมายทับหลังโดเมน) ที่คุณเห็น

มันควรจะเป็น:

เปลี่ยนเส้นทางถาวร / https://www.example.com/

คุณจะต้องแน่ใจว่าแคชของเบราว์เซอร์นั้นชัดเจนก่อนทำการทดสอบ เนื่องจากจะมีการแคชการเปลี่ยนเส้นทางที่ผิดพลาด

jp flag
ขอบคุณมากสำหรับความช่วยเหลือและการอธิบาย ฉันพยายามเพิ่มบรรทัดที่คุณเขียนด้านบน แต่ไม่มีอะไรเปลี่ยนแปลง กฎถูกดำเนินการเพราะฉันเห็นว่า HTTP procotol มีการเปลี่ยนแปลงด้วย HTTPS แต่รูทของเว็บไซต์ถูกลบไปแล้ว ณ จุดนี้น่าจะเป็นปัญหาการกำหนดค่า CMS ใช่ไหม?
kz flag
@simone_meh แต่ถ้าคุณขอ HTTPS URL โดยตรงก็ใช้ได้! นี่หมายความว่าคุณมี HTTP เป็น HTTPS ที่มีรูปแบบไม่ถูกต้องในการกำหนดค่าเซิร์ฟเวอร์เอง (ซึ่งดำเนินการก่อน `.htaccess`) คุณมีสิทธิ์เข้าถึงการกำหนดค่าเซิร์ฟเวอร์หรือไม่
jp flag
แน่นอน ฉันใช้ linux VPS ``` ชื่อเซิร์ฟเวอร์ www.example.com เปลี่ยนเส้นทางถาวร / https://www.example.com ``` เครื่องหมายทับท้ายที่ขาดหายไปในการเปลี่ยนเส้นทางถาวรอาจเป็นปัญหาหรือไม่
kz flag
@simone_meh ดูเหมือนว่ามีข้อผิดพลาดในการเปลี่ยนเส้นทางเซิร์ฟเวอร์ (เว้นแต่จะมีบางอย่างขาดหายไปในความคิดเห็น) คุณไม่มีเครื่องหมายทับต่อท้าย URL เป้าหมาย!? ฉันได้อัปเดตคำตอบแล้ว
jp flag
แก้ไขแล้ว! ขอบคุณมาก!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา