سؤال

أقوم بإعداد phpMyID على أحد أجهزتي، وأحاول أن أجعل Apache يعيد التوجيه إلى HTTPS فقط عند إرسال كلمة المرور.أنا أفعل هذا لأن الإعداد الأصلي الخاص بي لإعادة توجيه كل حركة المرور المفتوحة لم ينجح في أن تدفق المكدس لا يحب شهادتي الموقعة ذاتيًا.هذه هي القاعدة الجديدة التي كتبتها، لكنها لا تعمل:

RewriteRule http://%{SERVER_NAME}/openid/index.php(\?.+)$ https://%{SERVER_NAME}/openid/index.php$1
هل كانت مفيدة؟

المحلول

تحتاج إلى استخدام Cond لاختبار كل من المنفذ (http أو httpd) وسلسلة الاستعلام:

RewriteCond %{SERVER_PORT} 80
RewriteCond %{QUERY_STRING} (.+)
RewriteRule /openid/index.php https://%{SERVER_NAME}/openid/index.php?%1

إذا كنت تستخدم .htaccess فيجب عليك استخدامه بدلاً من ذلك

RewriteCond %{SERVER_PORT} 80
RewriteCond %{QUERY_STRING} (.+)
RewriteRule openid/index.php https://%{SERVER_NAME}/openid/index.php?%1

نصائح أخرى

الحل الأفضل سيكون:

    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^openid/index\.php$ https://%{SERVER_NAME}/openid/index.php

الشرح: RewriteCond %{SERVER_PORT} 80 يتطابق أيضًا مع المنافذ التي تتضمن فقط 80.الأمر نفسه ينطبق على النمط openid/index.php (أين "."يمكن أيضًا أن تكون أي شخصية).وإلحاق الاستعلام ليس ضروريًا لأن mod_rewrite يقوم تلقائيًا بإلحاق الاستعلام المطلوب في الأصل بالبديل ما لم يتم تقديم استعلام البديل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top