it-swarm.asia

تغيير بنية الرابط الثابت - تؤدي عمليات إعادة التوجيه في htaccess إلى كسر روابط الأرشيف

عندما بدأت مع مدونتي ، فإن الروابط الدائمة والبنية التالية:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

منذ فترة ، غيّرت بنية الرابط الثابت إلى "http://<domain>/%postname%/" فقط.

من أجل معالجة الروابط الخارجية لهيكل الرابط الثابت القديم ، أضفت السطر التالي في ملف htaccess:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

المشكلة الآن هي أن خط إعادة التوجيه يكسر روابط الأرشيف ، على سبيل المثال. تتم إعادة توجيه "http://<domain>/2010/09/02" إلى الصفحة الأولى بدلاً من إظهار المشاركات اعتبارًا من 2 سبتمبر 2010.

هل من الممكن تصحيح التوجيه المعاد توجيهه في htaccess ، أم لن أكون قادرًا على تناول الكيك والحصول عليه أيضًا؟

2
TFM

RedirectMatch من Mod_Alias ​​ليست قوية مثل Mod_Rewrite. إذا كان لديك Mod_Rewrite على مضيفك (تستخدم الروابط الدائمة جميلة ذلك على سبيل المثال) ، يمكنك إجراء إعادة التوجيه فقط إذا لم يكن عنوان URL بتنسيق رابط الأرشيف.

لاختبار هذه الحالة ، هناك RewriteCond ولإجراء أمر إعادة التوجيه ، هناك RewriteRule ... [R=301] التوجيه.

مثال على أساس البيانات الخاصة بك:

RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]

هذا لم يتم اختباره ، لكنني أعتقد أنه يجب عليه القيام بالعمل. لقد استخدمت الكمي ({2}) لتحديد عدد الأعداد التي تتوقعها بشكل أفضل. بجانب ذلك في RewriteCond ، قمت بإنشاء نمط يتطابق فقط مع 20 .. و 19 .. سنة.

يتحقق السطر الأول (الشرط ، RewriteCond) من عدم مطابقة عنوان URL الخاص بـ Archive وفقط في حالة عدم مطابقته ، سيتم تنفيذ القاعدة الخاصة بإعادة التوجيه. يقوم RewriteRule بعمل نفس الشيء مثل توجيه RedirectMatch الخاص بك.

2
hakre