توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
babakm
September 18th, 2017, 07:52
درود بر اساتید محترم
من پیوند یکتا سایتم رو تغییر دادم و از افزونه Change Permalink Helper استفاده میکنم
این افزونه پیوند های قبلی رو به خوبی به پیوند های جدید هدایت میکنه ولی صفحات حذف شده رو به صفحه 404 میفرسته که من می خوام به صفحه اصلی بفرسته
دوستان چگونه میتونم همچین کاری بکنم؟
این رو هم اضافه کنم
من افزونه All 404 Redirect to Homepage یا 404 redirections رو هم نصب کردم ولی وقتی فعال میکنم پیوند های قبلی رو هم به صفحه اصلی هدایت میکنه
ممنون میشم راهنمایی کنید
AtrafNet
September 18th, 2017, 09:21
سلام
چون پیوند های یکتا وردپرس فرضی هستن و در واقع فایل فیزیکی برای صفحات ساخته شده فرضی اون وجود نداره چنین افزونه هایی چون احتمالاً میان از کد های مشابه این در فایل htaccess. شما استفاده میکنن هم صفحات اخطار 404 که واقعاً وجود ندارن و هم صفحات فرضی پیوند های یکتا وردپرس رو باهم به صفحه اصلی شما ریدایرکت میکنن:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . / [L,R=301]
در کد بالا خط دوم شرط گذاشته شده که اگه فایل درخواست شده وجود نداشته باشه سراغ ریدایرکت که در خط سوم آمده بره.
پس متوجه شدیم که به دلیل فرضی بودن خود صفحات ساخته شده وردپرس که فایل فیزیکی ندارن این کد اونا رو با صفحاتی که واقعاً وجود ندارن یکسان می دونه.
چاره در اینه که شما در ریدایرکت کردن صفحات 404 هم دست به دامن سیستم صفحات فرضی وردپرس برید که برای این کار وردپرس از قبل فکر همه جاشو کرده و در هر قالب خودش امکان داشتن یه فایل 404.php رو داده مختص همین خطای 404 گذاشته.
این فایل 404.php موجود در هر قالب علاوه بر امکان ایجاد استایل و HTML اختصاصی با توجه به php بودن فرمتش امکان کلاً ریدایرکت کردن صفحه به جای نمایش صفحه ای خاص هم داره که با کد زیر انجام میشه:
نکته: اگر در قالب شما این فایل وجود نداره براحتی می تونید یه فایل با نام 404 و فرمت php در کنار سایر فایل های قالب خودتون (در پوشه اصلی قالب کنار functions.php و index.php و...) بسازید.
در کد بالا خط دوم در متغیری به نام homepage آدرس دامنه سایت شما توسط خود PHP و متغیر سراسری SERVER_$ شناسایی میشه اما می تونید اینو دستی هم خودتون وارد کنید تنها تفاوتش در اینه که وقتی اینطوری خود PHP آدرس دامنه سایت رو شناسایی کنه همین کد رو بدون هیچ تغییری برای سایت های مختلفی هم می تونید استفاده کنید.
سپس در خط سوم ریدایرکت رو اونم به صورت 301 انجام میده.
در آخر با دستور exit مانع از اجرای هیچ کد دیگه ای توسط فایل 404.php میشه.
با توجه به وجود دستور exit شما نیاز ندارید کد های فعلی فایل 404.php قالب فعلیتون رو حذف کنید می تونید کد بالا رو در اولین خط این فایل قبل از همه کد های موجود بذارید اینطوری هر وقت دیگه دوست نداشتید خطا های 404 ریدایرکت بشن می تونید فقط این پاراگراف اول فایل رو پاک کنید و برمیگرده مثل حالت قبل.
همچنین می تونید در کد بالا متغیر homepage رو با توجه به نیاز خودتون همراه با www کنید یا حتی http رو به https (اگه سایتتون از https استفاده میکنه) تغییر بدید.
bakuryu
September 18th, 2017, 09:29
لطفا این افزونه هم چک کنید
404 to 301
babakm
September 18th, 2017, 14:43
لطفا این افزونه هم چک کنید
404 to 301
درود بر شما
نصب کردم نشد
- - - Updated - - -
سلام
چون پیوند های یکتا وردپرس فرضی هستن و در واقع فایل فیزیکی برای صفحات ساخته شده فرضی اون وجود نداره چنین افزونه هایی چون احتمالاً میان از کد های مشابه این در فایل htaccess. شما استفاده میکنن هم صفحات اخطار 404 که واقعاً وجود ندارن و هم صفحات فرضی پیوند های یکتا وردپرس رو باهم به صفحه اصلی شما ریدایرکت میکنن:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . / [L,R=301]
در کد بالا خط دوم شرط گذاشته شده که اگه فایل درخواست شده وجود نداشته باشه سراغ ریدایرکت که در خط سوم آمده بره.
پس متوجه شدیم که به دلیل فرضی بودن خود صفحات ساخته شده وردپرس که فایل فیزیکی ندارن این کد اونا رو با صفحاتی که واقعاً وجود ندارن یکسان می دونه.
چاره در اینه که شما در ریدایرکت کردن صفحات 404 هم دست به دامن سیستم صفحات فرضی وردپرس برید که برای این کار وردپرس از قبل فکر همه جاشو کرده و در هر قالب خودش امکان داشتن یه فایل 404.php رو داده مختص همین خطای 404 گذاشته.
این فایل 404.php موجود در هر قالب علاوه بر امکان ایجاد استایل و HTML اختصاصی با توجه به php بودن فرمتش امکان کلاً ریدایرکت کردن صفحه به جای نمایش صفحه ای خاص هم داره که با کد زیر انجام میشه:
نکته: اگر در قالب شما این فایل وجود نداره براحتی می تونید یه فایل با نام 404 و فرمت php در کنار سایر فایل های قالب خودتون (در پوشه اصلی قالب کنار functions.php و index.php و...) بسازید.
در کد بالا خط دوم در متغیری به نام homepage آدرس دامنه سایت شما توسط خود PHP و متغیر سراسری SERVER_$ شناسایی میشه اما می تونید اینو دستی هم خودتون وارد کنید تنها تفاوتش در اینه که وقتی اینطوری خود PHP آدرس دامنه سایت رو شناسایی کنه همین کد رو بدون هیچ تغییری برای سایت های مختلفی هم می تونید استفاده کنید.
سپس در خط سوم ریدایرکت رو اونم به صورت 301 انجام میده.
در آخر با دستور exit مانع از اجرای هیچ کد دیگه ای توسط فایل 404.php میشه.
با توجه به وجود دستور exit شما نیاز ندارید کد های فعلی فایل 404.php قالب فعلیتون رو حذف کنید می تونید کد بالا رو در اولین خط این فایل قبل از همه کد های موجود بذارید اینطوری هر وقت دیگه دوست نداشتید خطا های 404 ریدایرکت بشن می تونید فقط این پاراگراف اول فایل رو پاک کنید و برمیگرده مثل حالت قبل.
همچنین می تونید در کد بالا متغیر homepage رو با توجه به نیاز خودتون همراه با www کنید یا حتی http رو به https (اگه سایتتون از https استفاده میکنه) تغییر بدید.
درود بر شما
عزیز کد زیر رو که فرمودید به صفحه 404 اضافه کردم و این افزونه ها رو
All 404 Redirect to Homepage یا 404 redirections غیر فعال کردم و تنها افزونه Change Permalink Helper فعال گذاشتم بمونه ولی با کد شما هم پیوند های قدیمی رو که میزنم میره به صفحه اصلی
یه دوستی تو یک فروم دیگه این کد رو پیشنهاد کردند
این کد استاندارد است؟
به من گفتند:
افزونه Change Permalink Helper رو پاک کنید و کد زیر رو به فایل functions.php قالبتون زیر اولین
<?php
اضافه کنید.
add_action('template_redirect', function() { if(is_404()) : global $wpdb; $slug = htmlspecialchars(basename($_SERVER[ 'REQUEST_URI' ])); $id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name = '%s' AND post_status = 'publish'", $slug)); if($id) { $url = get_permalink($id); wp_redirect($url, 301); exit(); } endif;});
add_action('template_redirect', function() { if(is_404()) { wp_redirect(home_url('/'), 301); exit(); }}, 11);
AtrafNet
September 18th, 2017, 17:12
درود بر شما
نصب کردم نشد
- - - Updated - - -
درود بر شما
عزیز کد زیر رو که فرمودید به صفحه 404 اضافه کردم و این افزونه ها رو
All 404 Redirect to Homepage یا 404 redirections غیر فعال کردم و تنها افزونه
Change Permalink Helper فعال گذاشتم بمونه ولی با کد شما هم پیوند های قدیمی رو که میزنم میره به صفحه اصلی
جناب پس به احتمال زیاد مشکل از کد های فایل htaccess. هست چون این روش فایل 404.php رو بارها برای سایت های مختلفی تست کردم و موردی نبوده.
اگر اشکال نداره که محتویات فایل htaccess. رو بذارید بررسی میکنم.
افزونه Change Permalink Helper رو هم من ضرورتش رو نمی فهمم وقتی با خود بخش تنظیمات => پیوند های یکتا وردپرس میشه پیوند یکتای دقیقی ساخت چرا باید این افزونه رو نصب داشت؟