apache2.4 mod_rewrite ไม่รวมนามแฝงเฉพาะ directroy / uri


11

ฉันมีการตั้งค่าต่อไปนี้ในหนึ่งใน vhosts ของฉัน:

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin webmaster@domain.de
    ServerSignature Off

    Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"

    <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge">
      Require all granted
      ForceType 'text/plain'
    </Directory>

    <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.*
      RewriteCond %{HTTPS} off
      # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L]
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </ifmodule>...

สิ่งที่ฉันต้องการบรรลุคือ mod_rewrite นั้นไม่ได้เขียน URL http://cloud.domain.de/.well-known/acme-challenge/ซ้ำเมื่อเข้าถึงurl

ฉันได้ลองใช้วิธีที่แตกต่างกันแล้วหนึ่งในนั้นเป็น RewriteRule ที่แสดงความคิดเห็นข้างต้น แต่ดูเหมือนว่าจะไม่ทำงาน: เซิร์ฟเวอร์เขียนใหม่เป็น https ทุกครั้ง

เมื่อฉันปิดใช้งานการเขียนใหม่เพื่อวัตถุประสงค์ในการทดสอบฉันสามารถเข้าถึง URL นามแฝงได้ดี ...

ฉันจะบรรลุ URL ที่ระบุไม่ถูกเขียนใหม่ได้อย่างไร

คำตอบ:


16

เช่นนั้น :

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

หาก URI ตรงstart with /.well-known/acme-challenge/กับคำขอจะไม่ถูกเปลี่ยนเส้นทาง


ก่อนอื่นขอบคุณสำหรับคำแนะนำของคุณ! น่าเสียดายที่มันไม่ทำงาน เมื่อคุณเยี่ยมชม: http://www.server-plant.de/.well-known/acme-challenge/มันยังคงถูกเขียนใหม่ (ฉันใช้กฎและเงื่อนไขการเขียนซ้ำเดียวกันสำหรับ www-Subdomain ของฉันดังนั้นมันจึงน่าอัศจรรย์เหมือนกับ cloud-subdomain)
FleBeling

แก้ไข: มี () แทน {} และRewriteCond %{HTTPS} offไม่ได้ requiered
Froggiz

ใช่ฉันเพิ่งคัดลอกของคุณโดยไม่ตรวจสอบวงเล็บที่ถูกต้อง แต่เอ่อ .. เกิดขึ้น :) ตอนนี้มันใช้งานได้อย่างมีเสน่ห์และคุณก็ถูกต้องเกี่ยวกับเงื่อนไขอื่น ๆ เพียงแค่หนึ่งคำถามซ้าย: วิธีการเปลี่ยนสภาพไปยังตรงกับทุกสิ่งที่อยู่เบื้องหลังต่อท้าย/? ดังนั้นจะไม่จับ index.html เป็นต้น
FleBeling

ตรงกับstart with /.well-known/acme-challenge/ค่าเฉลี่ยทั้งหมดที่ /.well-known/acme-challenge/anythingจะไม่เปลี่ยนเส้นทางด้วย
Froggiz

1
การกำหนดค่าการเขียนซ้ำสามารถสืบทอดไปยังโฮสต์เสมือนทั้งหมดด้วยRewriteOptions InheritDownตั้งแต่ Apache 2.4.8 RewriteEngine Onยังคงมีอยู่ในการกำหนดค่าโฮสต์เสมือนแต่ละรายการ
tobltobs

3

@mark รุ่นที่ถูกต้องของชุดตัวเลือก "ที่สั้นลงและมีประสิทธิภาพยิ่งขึ้น":

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]

การเพิ่มสิ่งนี้เพื่อหยุดกฏการเปลี่ยนเส้นทาง ssl ด้านล่างมันยอดเยี่ยม
James Tan

จุดเดียวในบรรทัด 2 ไม่ได้ผลสำหรับฉัน เป็นเพราะมันตรงกับเพียงหนึ่งตัวอักษรและ URL ประกอบด้วยตัวอักษรหลายตัว? ฉันใช้ ^ (. *) $ แทน
Jette

0

IMHO สั้นกว่าและทนทานกว่า:

RewriteCond %{REQUEST_URI} ^\.well\-known
RewriteRule - [L]

คุณอาจต้องการที่จะเพิ่ม / acme-challenge / ในที่สุด แต่ถ้าคุณต้องการที่จะแก้ปัญหาด้วยไฟล์โดยพลการเช่น. / ที่รู้จักกัน / ทดสอบโซลูชั่นนี้ทำงานได้ดีขึ้น

มันทำอะไรจริง: ดูว่าคำขอเริ่มต้นด้วย. ที่รู้จักกันดีในกรณีนั้นไม่ทำอะไรเลย (ความหมายของ -) และทำให้มันเป็นกฎสุดท้าย [L]


Nope virtualhosts ยังคงมีความสำคัญ "ส่วนที่อยู่ในส่วน <VirtualHost> จะถูกนำไปใช้หลังจากส่วนที่เกี่ยวข้องภายนอกคำจำกัดความโฮสต์เสมือนสิ่งนี้อนุญาตให้โฮสต์เสมือนแทนที่การกำหนดค่าเซิร์ฟเวอร์หลัก" จากhttpd.apache.org/docs/current/sections.html
Frederick Nord
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.