ทำไมการเปลี่ยนเส้นทาง. htaccess จึงทำงานใน http แต่ไม่ใช่กับ https


10

ฉันมีไฟล์. htaccess ที่ใช้งานได้ดีบนเว็บไซต์ http รุ่น แต่ไม่ใช่เมื่อฉันไปที่ https ทำไม?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

คำตอบ:


20

มีข้อมูลไม่เพียงพอ 100% ที่นี่เพื่อดำเนินการต่อ แต่ในการตั้งค่า SSL เริ่มต้นตามปกติ (Red Hat / CentOS / Fedora เป็นต้น) VirtualHost สำหรับ SSL ได้รับการตั้งค่าในคอนเทนเนอร์ของตัวเอง การใช้ mod_rewrite ต้องการอย่างน้อย "AllowOverride FileInfo" เพื่อตั้งค่าบนรูทเอกสารเพื่อให้มันทำงาน

ตรวจสอบการกำหนดค่าของคุณสำหรับ SSL (/etc/httpd/conf.d/ssl.conf โดยค่าเริ่มต้น) ตรวจสอบให้แน่ใจว่ามีลักษณะดังนี้:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

ค่าเริ่มต้นสำหรับ AllowOverride คือ 'ไม่มี' ดังนั้นการตั้งค่าอื่น ๆ (เช่น 'ทั้งหมด') ซึ่งเพิ่มความสามารถของ FileInfo ก็โอเค

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride


1
ฉันไม่เห็น /etc/httpd/conf.d/ssl.conf ใน linux ของฉันจะหาได้อย่างไร
Ashok KS

1
(1) คุณอาจจำเป็นต้องค้นหาแฟ้ม conf .. มีตัวอย่างเช่นในบางระบบมัน/etc/apache2/sites-enabled/default-ssl.conf(2) เป็นซุปเปอร์ชัดเจนถ้าคุณยังคงมีปัญหาให้ลองแทนAllowOverride All AllowOverride FileInfoเมื่อคุณทำงานได้แล้วคุณสามารถอ่านAllowOverideเอกสารApache อย่างละเอียดเพื่อ จำกัด การเข้าถึงโดยเฉพาะเพื่อความปลอดภัยสูงสุด (3) จำไว้ว่าคุณต้องรีสตาร์ท apache เพื่อให้การตั้งค่ามีผล
SilentSteel

4

เป็นไปได้ไหมที่ mod_rewrite ไม่ได้เปิดใช้งานสำหรับเซิร์ฟเวอร์ HTTPS หรือว่า. htaccess ไม่ได้ใช้งานอยู่

ตรวจสอบAllowOverideสิทธิ์ที่ใช้สำหรับไซต์ปกติและเปรียบเทียบกับเวอร์ชัน SSL ซึ่งอาจเป็นความแตกต่าง อาจแนะนำเพื่อปรับปรุงความปลอดภัยหากไม่เกิดอุบัติเหตุ

mod_rewrite อยู่ถัดจากสิ่งจำเป็นดังนั้นผู้ให้บริการโฮสติ้งที่ดีควรช่วยจัดการเรื่องนี้


1

"ทำงานกับ apache2 + ubuntu อย่างแม่นยำ"

ปัญหาที่คล้ายกันเกิดขึ้นกับฉันในขณะที่ฉันใช้กรอบ Slimและพยายามที่จะลบ index.php ที่จำเป็นใน URL reWrite ทำงานได้อย่างสมบูรณ์แบบสำหรับ http แต่สำหรับ https: มันแสดงให้เห็นว่าไม่พบ url ซึ่งหมายความว่า reWrite นั้นไม่ทำงาน

หลังจากทดลองใช้งานแล้วฉันพบวิธีแก้ปัญหานี้:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

เปลี่ยน AllowOverride ไม่มีเพื่อทั้งหมด ในทำนองเดียวกันsudo vim ssl


0

ฉันมีปัญหาที่คล้ายกันนี่คือสิ่งที่ได้ผลสำหรับฉัน

ใน httpd.conf ของคุณตรวจสอบให้แน่ใจว่าคุณมี:

ServerName domain.com

ServerAlias ​​www.domain.com

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