سؤال

لقد قمت بإعداد مصادقة htpasswd على موقعي المباشر وهي تعمل بشكل رائع، ولكن لا أريد أن يُطلب مني كلمة مرور عندما أعمل في بيئة التطوير.

في ملف httpd.conf الخاص بي لدي:

SetEnv APP_ENV "development"

في .htaccess الملف عندي :

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user

كنت أتساءل عما إذا كان هناك أي طريقة لوضع شرط شرطي حول عناصر htppasswd حتى متى APP_ENV يكون development أنه لا تتم مطالبتي بكلمة مرور.

هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

إذا كنت قادرا على ذلك، يجب عليك التفكير في الترقية إلى Apache 2.4 (أو أحدث 2.3Beta Build منذ 2.4 لم يتم إصدارها تماما بعد).

واحدة من الميزات الجديدة المتاحة هي حاويات الترخيص - جعلها أكثر بساطةحدد متطلبات الوصول باستخدام تتطلب التوجيه.

يجب أن ينتهي بك الأمر مع شيء مثل:

giveacodicetagpre.

نصائح أخرى

واحدة من طريقة البناء إذا كانت الكتل الشرطية مع متغيرات Enc تستخدم mod_macro الوحدة النمطية. لقد قمت بتطبيق مثال سابقا هنا .

في هذه الحالة بالذات، سيكون لديك أعلى ملف VirtualHost (قبل تعريف VirtualHost):

giveacodicetagpre.

وداخل VirtualHost:

giveacodicetagpre.

حيث يمكن أيضا تعيين المسار إلى ملف HTPassword كمعلمة من الماكرو.

الجانب السلبي لهذا الحل هو أنك تحتاج إلى تثبيت MOD_MACRO على خادم الإنتاج، فهي ليست وحدة نمطية مثبتة بشكل شائع وستحتاج إلى بعض السيطرة على إنتاج ENV للقيام بذلك. على الجانب الآخر، يكون الحل البسيط هو الحصول على العديد من إصدار من الفضليات الخاصة بك اعتمادا على البيئة، وإضافة بعض التعليقات على قسم المصادقة. ولكن إذا كنت تبحث عن حل عام، فمن المؤكد أنها تعني أنها مشكلة مظاهرة وتريد تجنب التحرير اليدوي للملفات، في مثل هذه الحالات يمكن أن تصبح MOD_MACRO طريقة احترافية للغاية لاستفادة تجارب Apache الخاصة بك، حتى تصبح تكوينات Apache الخاصة بك ماكرو واحد مع المعلمات، استدعاء الكثير من وحدات الماكرو الأخرى.

مشروطي في Apache Config يعمل مرة واحدة فقط، عند تحميل التكوين [إعادة].

ما أقوم به هو إنشاء Virtualhost ثانية مع نفس الدليل الجذر، والتحكم في الوصول باستخدام رفض / السماح بناء على عنوان IP هناك.

أضف ما يلي:

Require valid-user
Allow from <dev IP>
Satisfy Any

وهذا سوف يتطلب ذلك Require valid-user أو Allow from <dev IP> ينطبق.

في الخاص بك .htaccess يمكنك دمج الكتل داخل توجيه IfDefine، مثل:

<IfDefine PROD>
  bla bla bla
</IfDefine>

ثم تأكد من المرور -D PROD كوسيطة عند بدء تشغيل Apache.سيتم تشغيل هذا القسم فقط إذا تم تعريف PROD.في Ubuntu، يمكنك القيام بذلك عن طريق التحرير على سبيل المثال /etc/apache2/envvars وإضافة هذا السطر في النهاية:

export APACHE_ARGUMENTS="-D PROD"

يمكنك "عكسها" ربما باستخدام شيء مثل <IfDefine !DEV> للتشغيل فقط عندما لا تكون بيئة التطوير، ثم قم بتمرير -D DEV في تلك البيئة، واترك مواقع الإنتاج كما هي دون الحاجة إلى تحرير envvars.

تعديل وفقا لذلك لتناسب احتياجاتك!

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