يوم جيد!
في كثير من الأحيان في المنتديات ، يمكنك العثور على أسئلة على .htaccess - ملف تكوين خادم الويب Apache. حجر العثرة الرئيسي هو أن التطوير لم يكن لديه مهمة التهيئة المريحة للمستخدم النهائي (لا يشمل التوزيع مجموعة غلاف للتركيبات المرئية باستخدام مربعات الاختيار والقوائم المنسدلة ، وما إلى ذلك) ، لكن مسؤولي الخادم يتعاملون مع هذه المهمة بشكل ملحوظ ، كونهم محتوى "mana" (من فريق Linux - رجل - برنامج تعليمي سريع من المطورين ، أو في هذه الحالة من المحترفين إلى المحترفين).
في معظم الحالات ، تكون عمليات التلاعب البسيطة مطلوبة: إعادة توجيه غير مشروطة إلى موقع آخر ، أو إعادة توجيه من مكان إلى آخر (على سبيل المثال ، عند تغيير عنوان URL الخاص بالقسم). ويبدأ كل شخص في الاعتقاد بأنه لا توجد مشكلة بالتأكيد في أي مكان ، بل إنه من غير المجدي البحث عن حل على الإنترنت والبحث في المنتدى. دعونا نرى ما هذه المشاكل حقا ليست كذلك.
هذا الشيء له أسماء مختلفة. Neponyatki يمكن أن يسبب ربما هذا العدد - لماذا هو 301؟ يكمن الجوهر في بروتوكول HTTP نفسه ، والذي يستجيب لطلبات العميل برمز حالة محدد. رمز 404 غير موجود معروف لدى الجميع تقريبًا. رمز OK 200 غير معروف تقريبًا ، لكن هذا يعني أن كل شيء في حالة جيدة وسيتم عرض المستند في المستعرض. لكن الرمز 301 منقول بشكل دائم يعني أن الوثيقة انتقلت أخيرًا إلى عنوان جديد. هذا ما يسمى غالبًا إعادة التوجيه ، على الرغم من أن مجموعة الاستجابة الكلية تم تعيينها كـ - 3xx: إعادة التوجيه .
يحتوي Apache على عدة خيارات لعمليات إعادة التوجيه. توفر الوحدة النمطية mod_rewrite آلية ممتازة للتعامل مع عمليات إعادة التوجيه ، وفي المستقبل سأستخدمها في الأمثلة. تحتوي الوحدة النمطية mod_alias أيضًا على توجيهات لعمليات إعادة التوجيه من عنوان محدد أو من عنوان يطابق التعبير العادي:
إعادة توجيه دائمة / http://newsite.ru/
RedirectMatch دائم. * المتشعب: / / www.newsite.ru/
لكن mod_rewrite لديه خيارات إضافية لإعادة التوجيه ، لذلك من الأفضل استخدام (IMHO).
بشكل عام ، لإعادة توجيه خارجي غير مشروط (دعنا نسميه المستخدم) ، حيث يقوم المتصفح بإعادة التوجيه تلقائيًا إلى صفحة أخرى ، عادةً بشكل غير محسوس للمستخدم (يتغير شريط العناوين) ، يمكنك وضع مثل هذا الرمز في .htaccess:
أعد كتابة على
RewriteRule. * HTTP: //newsite.ru/ [L ، R = دائم]
هنا ، يتضمن السطر الأول آلية الوحدة النمطية mod_rewrite ، والتي يُسمح لها بعمل أي شيء بالعناوين. دعنا نسمي تحويل عنوان URL هذا بشروط سريعة. يحدد السطر الثاني مباشرة قاعدة التحويل ؛ في المثال أعلاه ، سيتم إعادة توجيه جميع الطلبات إلى http://newsite.ru/. يتم وضع العلامات بين قوسين مربعين: قاعدة L - الأخيرة (الأخيرة) ، R - نوع إعادة التوجيه (Redirect) ، المشار إليها بالرمز R = ، حيث يكون الكود عبارة عن تعيين أبجدي أو رقمي (دائم أو 302).
في الواقع ، يعد mod_rewrite شيئًا مفيدًا للغاية ، لأنه بسبب هذا ، تستخدم العديد من المحركات بنشاط ما يسمى CNC (Human URL Understandingable). إذا كنت غير معتاد على هذا المصطلح ، فسوف أشرح لك مثالاً. مقال حول محركات مجانية للموقع لديه العنوان: https://a-panov.ru/2014/11/free-cms/
بالنظر إلى عنوان URL هذا ، يتضح على الفور أنه تم نشر المقالة في نوفمبر 2014. عن طريق إزالة العنوان بخط مائل زائدة - https://a-panov.ru/2014/11/ - سوف نتلقى قائمة بجميع المنشورات لشهر نوفمبر. العناوين العادية ، اكتب:
https://a-panov.ru/؟p=389
لا الود الخاص. رؤية مثل هذا العنوان ، لا يمكنك القول عن الصفحة التي يقودها ، لا شيء على الإطلاق.
هذه الطريقة جيدة عندما لا تهتم بالصفحة التي يرتبط بها الموقع الجديد. ولكن إذا انتقلت إلى مجال آخر ، فمن المستحسن إعادة توجيه جميع الطلبات مع الحفاظ على العناوين. للقيام بذلك ، استخدم الكود التالي:
RewriteRule ^. * $ Http://newsite.ru/$0 [QSA، L، R = permanent]
سيحفظ علامة QSA الجديدة أيضًا المعلمات التي يمكن العثور عليها في العناوين بعد علامة الاستفهام. في المثال المألوف بالفعل:
https://a-panov.ru/؟p=389
إذا قمت بوضع الشفرة في .htaccess أعلاه ، فستكون هناك إعادة توجيه إلى العنوان http://newsite.ru/؟p=389 والتي بدون هذه العلامة لن تكون موجودة.
فيما يلي ، سأحذف توجيه تضمين التحويل:
أعد كتابة على
فقط تذكر: إذا كنت تستخدم آلية mod_rewrite ، فيجب تنفيذ جميع الشروط / التحويلات بعد هذا التوجيه. لتعطيل السطر التالي يستخدم:
أعد كتابة
وفقًا لذلك ، ليست هناك حاجة لكل تحويل إلى "تشغيل" التحويلات بشكل مستمر - يبدأ الأمر تلقائيًا ، بعد التوجيه الأول مباشرة.
هذه التوجيهات مطلوبة للحالات التي يكون فيها الموقع متاحًا على الخيارين nsite.ru و www.nsite.ru ، وفي هذه الحالة ، تعتبر محركات البحث هذه التكرارات مكررة ويمكنها اختيار أحد الخيارات المرآة الرئيسية أو في البحث سيكون هناك خيارات من كلا المجالين. بشكل عام ، هذا عامل سلبي عند تصنيف الموقع.
الخيار أسهل لمجال واحد. يتم تنفيذ إعادة التوجيه من النطاق الفرعي www.site.ru إلى site.ru:
RewriteCond٪ {HTTP_HOST} ^ www \ .nsite \ .ru $
RewriteRule. * Http://nsite.ru/$0 [QSA، L، R = دائم]
هذا هو المكان الذي ظهر فيه توجيه RewriteCond الجديد ، والذي يحدد الشرط الذي يجب أن تعمل فيه عمليات إعادة التوجيه - قواعد RewriteRule . الشرط ، في هذه الحالة ، اسم النطاق المقابل لـ www.nsite.ru (في التعبيرات العادية ، يشير رمز النقطة إلى "أي حرف" ، لذا يُنصح بحمايته بخط مائل عكسي).
إعادة التوجيه العكسي هي أيضًا بسيطة جدًا:
RewriteCond٪ {HTTP_HOST} ^ nsite \ .ru $
RewriteRule. * Http://www.nsite.ru/$0 [QSA، L، R = دائم]
كلا الخيارين يعملان ، لكنهما يتمتعان بطرح صغير - لكل التكوين الجديد ، من الضروري استبدال مجال nsite.ru الخاص بك. هل من الممكن عمل خيار فريد؟ من السهل!
إعادة التوجيه من أي مجال فرعي www:
RewriteCond٪ {HTTP_HOST} ^ www \. (. *) $
RewriteRule. * Http: //٪ 1 / $ 0 [QSA، L، R = دائم]
إعادة التوجيه إلى نطاق فرعي باستخدام www:
RewriteCond٪ {HTTP_HOST}! ^ Www \.
RewriteRule. * Http: //www.٪ {HTTP_HOST} / $ 0 [QSA، L، R = دائم]
٪ {HTTP_HOST} - النطاق الحالي
مثل هذه الأسئلة تثار أيضا. المشكلة هي أن Explorer القياسي (التطبيق في Windows ، المسؤول عن الواجهة الرسومية) لا يسمح لك بإنشاء ملفات تبدأ من نقطة (إنشاء ملفات أو مجلدات بالنقر بزر الماوس الأيمن على سطح المكتب أو في نافذة وتحديد الإجراء المطلوب من قائمة " إنشاء" ). ولكن هناك طريقة للخروج: افتح مسجل Notepad القياسي ، وحدد File → Save as ... في القائمة ، وحدد .htaccess كاسم للملف المحفوظ - بعد ذلك سيتم إنشاؤه.
هناك حالات عندما لا تعمل التوجيهات من ملف. يحدث هذا عادةً بسبب حقيقة أن دعم htaccess معطل في تكوين Apache ، والذي يكون التوجيه مسؤولاً عنه:
AllowOverride لا شيء
يتم ذلك عادةً لزيادة السرعة إلى حد ما - في هذه الحالة ، لا يبحث خادم الويب ويحلل .htaccess.
من الممكن أيضًا عدم استخدام Apache على الخادم ، على سبيل المثال ، IIS هو "الضيف" الرئيسي على استضافة Windows. للتوضيح ، اتصل بدعم المضيف الخاص بك.
سؤال متكرر إلى حد ما. في خادم الويب هذا ، هذا غير ممكن. ومع ذلك ، هذا عادة غير مطلوب. الحقيقة هي أن nginx عادة ما يتم تثبيته كصديق ، أي أنه يقبل ويعالج جميع الطلبات التي إما أنه يؤدي نفسه أو يعيد التوجيه إلى الواجهة الخلفية ، والتي يمكن تنفيذها بواسطة Apache ، والتي يمكن تهيئتها بشكل أكبر باستخدام .htaccess.
ليس على الانترنت 1 يوم
التعليقات: 2834 المنشورات: 394 التسجيل: 02-04-2009
Copyleft © 2017 . www.flashphone.ru