كيف يمكنني استخدام .htaccess إلى إعادة توجيه إلى URL التي تحتوي على HTTP_HOST?

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

سؤال

المشكلة

أنا بحاجة إلى توجيه بعض قصيرة من الراحة عناوين أطول عناوين المواقع الفعلية.الموقع في السؤال يستخدم مجموعة من النطاقات الفرعية لتحديد مجموعة من التنمية أو العيش الإصدارات.

أود URL الذي معينة يتم إعادة توجيه طلبات إدراج HTTP_HOST مثل أن لا يكون على خلق العرف .ملف htaccess لكل مضيف.

Host-مثال محدد (مقصوص من .ملف htaccess)

Redirect /terms http://support.dev01.example.com/articles/terms/

هذا المثال يعمل بشكل جيد من أجل تطوير نسخة على التوالي في dev01.example.com.إذا كنت تستخدم نفس الخط الرئيسي .ملف htaccess لتطوير نسخة تعمل تحت dev02.example.com كنت في نهاية المطاف يجري توجيهك إلى المكان الخطأ.

مثالية القاعدة (غير متأكد من بناء الجملة الصحيح)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

هذه القاعدة لا يعمل فقط بمثابة مثال على ما كنت ترغب في تحقيقه.أنا لا يمكن استخدام نفس القاعدة تحت العديد من المضيفين مختلفة والحصول على النتيجة الصحيحة.

الأجوبة ؟

  • يمكن أن يتم ذلك مع mod_alias أو أنها لا تتطلب أكثر تعقيدا mod_rewrite?
  • كيف يمكن تحقيق ذلك باستخدام mod_alias أو mod_rewrite?تفضل mod_alias الحل إذا كان ذلك ممكنا.

التوضيحات

أنا لا البقاء على نفس الخادم.أود:

أود أن تكون قادرة على استخدام نفس القاعدة .ملف htaccess على حد سواء example.com و dev.example.com.في هذه الحالة يجب أن يكون قادرا على الرجوع إلى HTTP_HOST كمتغير بدلا من تحديد حرفيا في URL الذي يتم إعادة توجيه طلبات.

سوف التحقيق في HTTP_HOST المعلمة كما اقترح ولكن كنت أتمنى العمل على سبيل المثال.

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

المحلول

فمن الغريب أن لا أحد قام الفعلية العمل الجواب (لول):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

لمساعدتك على القيام بهذه المهمة بشكل أسرع المفضل أداة للتحقق من regexp:

http://www.quanetic.com/Regex (لا تنسى أن تختار ereg(POSIX) بدلا من فترة الحمل(PCRE)!)

يمكنك استخدام هذه الأداة عندما تريد التحقق من URL ومعرفة ما إذا كانوا صالحة أم لا.

نصائح أخرى

أعتقد أنك سوف ترغب في التقاط HTTP_HOST قيمة ومن ثم استخدام ذلك في كتابة القاعدة:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

إذا فهمت سؤالك صحيح كنت ترغب في إعادة توجيه 301 (قل المتصفح للذهاب إلى عنوان URL آخر).إذا لم يكن الحل الصحيح بالنسبة لك, جرب هذه الأداة: http://www.htaccessredirect.net/index.php ومعرفة ما يصلح لك.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

وفقا لهذا cheatsheet ( http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/png/ ) هذا يجب أن تعمل

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

علما بأنني لا أملك وسيلة لاختبار هذا حتى هذا ينبغي أن تؤخذ كمؤشر في الاتجاه الصحيح بدلا من صريح الإجابة.

إذا كنت البقاء على نفس الخادم ثم وضع هذا في الخاص بك .هتكس العمل بغض النظر عن الخادم:

RedirectMatch 301 ^/terms$ /articles/terms/

ينتج:

http://example.com/terms -> http://example.com/articles/terms

أو:

http://test.example.com/terms -> http://test.example.com/articles/terms

من الواضح أنك سوف تحتاج إلى ضبط REGEX مطابقة و مثل للتأكد من أنها تتواءم مع ما أنت ذاهب الى رمي في ذلك.نفس الأمر ينطبق على 301 ، قد ترغب 302 إذا كنت لا تريد المتصفحات إلى ذاكرة التخزين المؤقت على الكمبيوتر.

إذا كنت تريد:

http://example.com/terms -> http://server02.example.com/articles/terms

ثم سوف تحتاج إلى استخدام HTTP_HOST المعلمة.

أنت لا تحتاج إلى أن تدرج هذه المعلومات.مجرد تقديم URI نسبة إلى الجذر.

Redirect temp /terms /articles/terms/

هذا هو موضح في على mod_alias الوثائق:

عنوان URL الجديد يجب أن يكون URL المطلق بداية مع النظام المضيف ، ولكن URL-مسار بداية مع خط مائل ويمكن أيضا أن تستخدم في هذه الحالة مخطط المضيف الخادم الحالي سيتم إضافة.

يبدو أن ما تحتاجه حقا هو مجرد اسم مستعار ؟

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