View Full Version : سوال: مشکل عجیب در httaccess
bachemahal
جمعه 22 خرداد 1394, 19:18 عصر
با سلام
داخل فایل httaccess الگوی RewriteRule من به صورت زیر می باشد
RewriteRule ^(\w+)/(\w+)/(.+)$ ./controllers/$1controller.php?action=$2¶m1=$3
پارامتر سوم (.+) که به معنی قبول کردن همه کاراکترها از ورودی میباشد وقتی حروف فارسی می نویسم یا انگلیسی هیچ مشکلی نیست چیز عجیب اینجاست که اگه داخل پارامتر مورد نظر کاراکتر م فارسی باشد با خطای 404 روبه رو می شم می خواستم ببینم کسی تا به حال با این مشکل برخورد کرده.
abolfazl-z
شنبه 23 خرداد 1394, 01:44 صبح
اون ادرسی که تبدیل می شود را بگذارید اینجا ببینیم + کد کامل htaccess
bachemahal
یک شنبه 24 خرداد 1394, 11:55 صبح
آدرسی که خطا نمیده
http://127.0.0.1:1396/news/detail/کار (http://127.0.0.1:1396/news/detail/%DA%A9%D8%A7%D8%B1/3)
آدرسی که خطا میده
http://127.0.0.1:1396/news/detail/مار (http://127.0.0.1:1396/news/detail/%DA%A9%D8%A7%D8%B1/3)
کد httaccess
RewriteEngine On
AddDefaultCharset utf-8
DefaultLanguage fa-IR
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(\w+)/(\w+)/(.+)$ ./controllers/$1controller.php?action=$2¶m1=$3
abolfazl-z
یک شنبه 24 خرداد 1394, 17:07 عصر
نگاه کنید من تست کردم و از لحاظ منطقی درست عمل کرد و هیچ مشکلی نداشت.
در دو صورت خطا نشان می دهد :
1. زمانی که پترن شما درست عمل نکند
2. فایل درخواستی یافت نشود
حالا برای اینکه مطمئن شوید باید تست کنید.
بجای آدرس ./controllers/$1controller.php?action=$2¶m1=$3 یک فایل test.php درست کنید و آدرس اش را بجای آن بگذارید و خروجی را ببینید. (برای هر دو آدرس تست کنید)
test.php?out=$1-$2-$3
test.php
<?php
print_r($_GET);
?>
یک سوال دیگر ؟ مطمئن هستید آدرس controllers/$1controller.php? درست هست ؟ اون 1$ همان news می شود. یعنی آدرس زیر وجود دارد ؟
controllers/newscontroller.php
bachemahal
یک شنبه 24 خرداد 1394, 19:00 عصر
ممنون از پاسخگوییتون
فرمایش شما صحیح، اما همونطور که گفتم آدرس اول بدون مشکل باز میشه، پس فایل درخواستی پیدا میشه و آدرس هم درسته.
سوال من درواقع اینه که چرا پترن (.+) که شامل همه کاراکترها میشه و همه فارسی ها هم قبول میکنه، حرف م رو نمیشناسه.
برای مطمئن شدن پترن زیر رو هم گذاشتم و درست عمل کرد.
([a-z0-9ما-ی]+)
یعنی علاوه بر تمامی الفبای فارسی و انگلیسی حرف م جدا آوردم و صفحه باز شد!
abolfazl-z
یک شنبه 24 خرداد 1394, 22:53 عصر
شما تست های لازم را انجام دهید و این دلیل ها باعث نمیشه که تست نکنید ! شاید اسکریپت داره خطای 404 به کلاینت می دهد.
فقط آدرس را تغییر دهید به یک فایل دیگر در دو حالت تست کنید و خروجی را اینجا بگویید.
حالت اول
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule (.*) test.php?test=$1
حالت دوم
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(\w+)/(\w+)/(.+)$ test.php?action=$1-$2-$3
درضمن من به آپشن های زیر مشکوکم !
AddDefaultCharset utf-8
DefaultLanguage fa-IR
این ها را به حالت comment ببرید.
فایل test.php را مثل بالا کد نویسی کنید.
bachemahal
یک شنبه 24 خرداد 1394, 23:23 عصر
حالت اول که یک پترن بیشتر نداریم و درواقع کدتون رو به کد زیر اصلاح کردم
RewriteRule (.*) test.php?action=$1
نتیجه این شد که جایی که م داره تو آدرس کاراکتر ناشناس بصورت زیر نمایش داده شد
�
تو حالت دوم هم که اصلا به صفحه نمیره
AddDefaultCharset utf-8
DefaultLanguage fa-IR
هم برداشتم مشکل رو حل نکرد
abolfazl-z
دوشنبه 25 خرداد 1394, 00:17 صبح
نتیجه این شد که جایی که م داره تو آدرس کاراکتر ناشناس بصورت زیر نمایش داده شد
من پست بالا را ویرایش کردم.
فایل htaccess
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule (.*) test.php?test=$1
در فایل test.php محتوای زیر را قرار دهید :
<meta charset="utf8">
<?=var_dump($_GET['test'])?>
صفحه را از نوع utf8- without bom ذخیره کنید و همچنین اگر header نوع کدگذاری ست نشده(AddDefaultCharset utf-8) حتما از طریق html برای مشاهده صحیح متن از <meta charset="utf8" > استفاده کنید.
اگر اشتباه نکنم مشکل در نوع ارسال داده است که ممکن از طرف کلاینت باشه یا از طرف apache (یک نوع دستکاری داده)
خروجی را بصورت text/plain بگذارید حتما (در mozilla میتونی بر روی صفحه راست کلیک کرده و گزینه view page source را بزنی)
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.