بعد إعادة تصميم الموقع ، لديّ بضع صفحات تحتاج إلى إعادة توجيه. كل شيء يبقى على نفس المجال ، فقط بضعة أشياء تمت إعادة تنظيمها و/أو إعادة تسميتها. هم من النموذج:
/contact.php
هو الآن:
/contact-us.php
باستخدام ملف htaccess ، أضفت هذا السطر ، وهو السطر الذي أجده موصى به أكثر:
RedirectMatch 301 /contact.php /contact-us.php
هذا في الغالب جيد - إنه يقوم بالمهمة - المشكلة هي أنه يعيد التوجيه:
هل هناك طريقة لتحديد أنني أريد فقط إعادة توجيه contact.php في الجذر؟
RedirectMatch
يستخدم تعبيرًا عاديًا متطابقًا مع مسار URL. والتعبير العادي /contact.php
يعني فقط أي مسار URL يحتوي على /contact.php
ولكن ليس فقط أي مسار URL يكون بالضبط /contact.php
. لذا استخدم نقاط الارتساء لبداية ونهاية السلسلة (^
و $)
:
RedirectMatch 301 ^/contact\.php$ /contact-us.php
هذا ينبغي أن تفعل ذلك
RedirectPermanent /contact.php /contact-us.php
redirect 301 /contact.php /contact-us.php
لا فائدة من استخدام قاعدة إعادة التوجيه ثم عليك كتابة الروابط بحيث تكون مطابقة تمامًا. إذا لم تقم بتضمين ذلك ، فلست مضطرًا إلى الاستبعاد! مجرد استخدام إعادة التوجيه دون تطابق ثم استخدام الروابط بشكل طبيعي
يمكنك أيضًا استخدام RewriteRule إذا أردت القدرة على مطابقة القوالب وإعادة توجيه عناوين url.
إذا كنت تفضل استخدام أبسط حل ممكن لمشكلة ، فبديل RedirectMatch هو ، التوجيه الأساسي إعادة التوجيه التوجيه.
لا يستخدم مطابقة الأنماط ولذا فهو أكثر وضوحًا وأسهل على الآخرين لفهمها.
أي
<IfModule mod_alias.c>
#Repoint old contact page to new contact page:
Redirect 301 /contact.php http://example.com/contact-us.php
</IfModule>
يجب ترحيل سلاسل الاستعلام لأن المستندات تقول:
سيتم إلحاق معلومات المسار الإضافية التي تتجاوز مسار URL المطابق بعنوان URL الهدف.