إعادة كتابة السلوك القواعد يتغير عند استخدامه معًا

StackOverflow https://stackoverflow.com/questions/1638119

  •  08-07-2019
  •  | 
  •  

سؤال

كل قاعدة محددة أدناه تعمل بشكل جيد عند استخدامها وحدها. ومع ذلك ، عند استخدامها معًا ، يتغير سلوك القواعد.

عندما يتم استخدام مجموعة القاعدة رقم 2 في حد ذاتها ، طلب ل https: // داخلي/أمان/تسجيل الدخول يتم إعادة كتابته بواسطة Apache إلى sapphire/main.php دون معرفة المتصفح. هذا هو السلوك المتوقع.

عند استخدام كلتا المجموعتين القاعدة معًا ، ينتج طلب عنوان URL المذكور مسبقًا في Apache إرسال 301 إعادة توجيه إلى http: //internal/sapphire/main.php؟ url = الأمان/تسجيل الدخول.

لماذا يرسل Apache هذا إعادة التوجيه بدلاً من القيام بكتابة داخلية؟

# Rule Set # 1
# - Forces all HTTPS requests to HTTP, except for security section requests.
#   Example: request for https://internal/abc/ 
#   -> redirected to http://internal/abc/
RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !^/Security($|/.*$)
RewriteRule (.*) http://internal/$1 [R=301,L]

# Rule Set # 2
# - Hands request to CMS - web user does not see this behind-the-scenes rewrite
RewriteRule (.*) sapphire/main.php?url=$1&%{QUERY_STRING} [L]
هل كانت مفيدة؟

المحلول

ال ل يسبب العلم إعادة توجيه عنوان URL المعاد كتابته بالفعل. لذا حاول تحليل عنوان URL الأصلي المطلوب بدلاً من ذلك:

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top