رفع مشکل نشانی های فارسی در وردپرس (WordPress) و آی آی اس (IIS) – راهنمای مهاجرت وردپرس از لینوکس به ویندوز

امان از دست برنامه نویسان PHP

اخیرا وردپرس را برای پرتال اطلاع رسانی نوند انتخاب کردم و همه کارهاش رو انجام دادم، در ابتدا روی سرور لینوکسی و طبیعتا با وب سرور Apache بود، همه چیز خوب بود و تمامی نشانی های فارسی هم کار می کرد، اما وقتی وب سایت رو به سرور جدیدمون که ویندوزی هست منتقل کردیم، چند تا ایراد رخ داد:

  1.  دسترسی به فایل های دارای اسامی فارسی دیگر از طریق پی اچ پی (PHP) مقدور نیست، مثلا اگر شما تصویری توی سایتتون دارین و اسم فایلش فارسی هست، در ویندوز، پی اچ پی نمی تونه این فایل رو بخونه، بنابراین نمی تونه کاری باهاش بکنه، مثلا کوچک شون بکنه. راه حل: ندارد!این مشکل، البته با دردسر، قابل حل است، باید تک تک فایل هایی که اسمشون غیر انگلیسی هست رو پیدا کنید، اسم شون رو عوض کنین و به وردپرس هم بگین. دلیل این مشکل هم اینه که PHP رو با کتابخانه ای کامپایل کردن که از یونیکد در ویندوز پشتیبانی نمی کنه
  2. مشکل دوم اما، خیلی مهمتر است، چرا که به موجودیت سایت شما بر می گردد، مشکل دوم مربوط به نشانی برگه ها و نوشته های شماست. قبلتر ها وردپرس کلا نشانی های غیرواقعی رو در ویندوز پشتیبانی نمی کرد، مشکل ش هم به تنظیمات IIS بر می گشت، اما در نسخه های جدید IIS، این مشکل حل شده و با تنظیمات کمی در فایل web.config که خوشبختانه خود وردپرس انجام میده، میشه برای صفحات نشانی های مجازی داشت، اما! برای صفحات با نشانی فارسی داستان فرق می کنه! اینجا هم سایتهای فارسی مثل سایر سایتهای غیر لاتین مشکل دارند، اگر آدرس صفحات فارسی باشند، وردپرس نمی تونه کاری بکنه و بنابراین وقتی شما صفحه ای با آدرس فارسی رو می زنین، میگه چنین صفحه ای وجود نداره.
    در نشانی http://q.nett.gr/wordpress-3-x-on-iis-7-x-with-unicode-permalinks-problem-solved این مشکل بررسی شده و دو راه حل ارائه شده که به شما کمک می کنه چطور این مشکل رو حل کنید. من روش دوم رو انتخاب کردم، اما انتخاب روش دوم که افزودن یک خط کد به فایل index.php است، یک خطایی رو ایجاد کرد
    کدی که باید افزوده شود:

$_SERVER[‘REQUEST_URI’] = $_SERVER[‘UNENCODED_URL’];

بعد از اضافه کردن خط بالا و زمانی که صفحه اول وب سایت رو باز کردم با خطای دور بی پایان هدایت یا redirection loop مواجه شدم. این مشکل از اینجا به وجود میاد که در صفحه اول متغیر UNENCODED_URL خالی و null هست. بنابراین متغیر REQUEST_URI رو هم نول می کنه، در صورتی که REQUEST_URI نول باشه، وردپرس مرورگر رو به صفحه اصلی هدایت می کنه که باز دوباره این اتفاق میفته و باز دوباره و دوباره و …

برای رفع این مشکل به صورت کاملا ساده، یک شرط به صورت زیر، اضافه کنید:

if($_SERVER[‘UNENCODED_URL’])
    $_SERVER[‘REQUEST_URI’] = $_SERVER[‘UNENCODED_URL’];

4 فکر می‌کنند “رفع مشکل نشانی های فارسی در وردپرس (WordPress) و آی آی اس (IIS) – راهنمای مهاجرت وردپرس از لینوکس به ویندوز

  1. behzadian نویسنده

    اگر اسم فایل ها فارسی باشند، PHP نمی تواند آنها را بخواند. این روش فقط برای نشانی های مجازی کاربرد دارد

دیدگاه‌ها بسته هستند.