مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
درود بر اساتید محترم
من پیوند یکتا سایتم رو تغییر دادم و از افزونه Change Permalink Helper استفاده میکنم
این افزونه پیوند های قبلی رو به خوبی به پیوند های جدید هدایت میکنه ولی صفحات حذف شده رو به صفحه 404 میفرسته که من می خوام به صفحه اصلی بفرسته
دوستان چگونه میتونم همچین کاری بکنم؟
این رو هم اضافه کنم
من افزونه All 404 Redirect to Homepage یا 404 redirections رو هم نصب کردم ولی وقتی فعال میکنم پیوند های قبلی رو هم به صفحه اصلی هدایت میکنه
ممنون میشم راهنمایی کنید
پاسخ : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
سلام
چون پیوند های یکتا وردپرس فرضی هستن و در واقع فایل فیزیکی برای صفحات ساخته شده فرضی اون وجود نداره چنین افزونه هایی چون احتمالاً میان از کد های مشابه این در فایل 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 و...) بسازید.
کد:
<?php
$homepage = 'http://' . $_SERVER['HTTP_HOST'];
header("Location: $homepage", true, 301);
exit();
?>
در کد بالا خط دوم در متغیری به نام homepage آدرس دامنه سایت شما توسط خود PHP و متغیر سراسری SERVER_$ شناسایی میشه اما می تونید اینو دستی هم خودتون وارد کنید تنها تفاوتش در اینه که وقتی اینطوری خود PHP آدرس دامنه سایت رو شناسایی کنه همین کد رو بدون هیچ تغییری برای سایت های مختلفی هم می تونید استفاده کنید.
سپس در خط سوم ریدایرکت رو اونم به صورت 301 انجام میده.
در آخر با دستور exit مانع از اجرای هیچ کد دیگه ای توسط فایل 404.php میشه.
با توجه به وجود دستور exit شما نیاز ندارید کد های فعلی فایل 404.php قالب فعلیتون رو حذف کنید می تونید کد بالا رو در اولین خط این فایل قبل از همه کد های موجود بذارید اینطوری هر وقت دیگه دوست نداشتید خطا های 404 ریدایرکت بشن می تونید فقط این پاراگراف اول فایل رو پاک کنید و برمیگرده مثل حالت قبل.
همچنین می تونید در کد بالا متغیر homepage رو با توجه به نیاز خودتون همراه با www کنید یا حتی http رو به https (اگه سایتتون از https استفاده میکنه) تغییر بدید.
پاسخ : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
لطفا این افزونه هم چک کنید
پاسخ : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
نقل قول:
نوشته اصلی توسط
bakuryu
لطفا این افزونه هم چک کنید
درود بر شما
نصب کردم نشد
- - - Updated - - -
نقل قول:
نوشته اصلی توسط
AtrafNet
سلام
چون پیوند های یکتا وردپرس فرضی هستن و در واقع فایل فیزیکی برای صفحات ساخته شده فرضی اون وجود نداره چنین افزونه هایی چون احتمالاً میان از کد های مشابه این در فایل 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 و...) بسازید.
کد:
<?php
$homepage = 'http://' . $_SERVER['HTTP_HOST'];
header("Location: $homepage", true, 301);
exit();
?>
در کد بالا خط دوم در متغیری به نام 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 فعال گذاشتم بمونه ولی با کد شما هم پیوند های قدیمی رو که میزنم میره به صفحه اصلی
کد:
<?php
$homepage = 'http://' . $_SERVER['HTTP_HOST'];
header("Location: $homepage", true, 301);
exit();
?>
پاسخ : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
یه دوستی تو یک فروم دیگه این کد رو پیشنهاد کردند
این کد استاندارد است؟
به من گفتند:
افزونه 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);
پاسخ : مشکل در تغییر پیوند یکتا و هدایت به صفحه اصلی
نقل قول:
نوشته اصلی توسط
babakm
درود بر شما
نصب کردم نشد
- - - Updated - - -
درود بر شما
عزیز کد زیر رو که فرمودید به صفحه 404 اضافه کردم و این افزونه ها رو
All 404 Redirect to Homepage یا 404 redirections غیر فعال کردم و تنها افزونه
Change Permalink Helper فعال گذاشتم بمونه ولی با کد شما هم پیوند های قدیمی رو که میزنم میره به صفحه اصلی
کد:
<?php
$homepage = 'http://' . $_SERVER['HTTP_HOST'];
header("Location: $homepage", true, 301);
exit();
?>
جناب پس به احتمال زیاد مشکل از کد های فایل htaccess. هست چون این روش فایل 404.php رو بارها برای سایت های مختلفی تست کردم و موردی نبوده.
اگر اشکال نداره که محتویات فایل htaccess. رو بذارید بررسی میکنم.
افزونه Change Permalink Helper رو هم من ضرورتش رو نمی فهمم وقتی با خود بخش تنظیمات => پیوند های یکتا وردپرس میشه پیوند یکتای دقیقی ساخت چرا باید این افزونه رو نصب داشت؟