PDA

View Full Version : سوال: چرا وقتی از mod_Rewrite استفاده می کنم لینکهای خارجی لود نمی شن؟



phpweb
یک شنبه 19 دی 1389, 12:54 عصر
من از دستور زیر توی فایل htaccess استفاده می کنم تا بتونم لینکهای سایتم رو به شکل دلخواه توی آدرس بار نشون بدم.


RewriteEngine On
RewriteRule ^index/([0-9]*)/([0-9]+)$ index.php?id=$1&name=$2 [L]]

همه چیز به خوبی کار می کنه، بغیر از اینکه فایلهای خارجی مثل لینکهای خارجی سی اس اس لود نمی شن و در نتیجه ظاهر صفحه بشکل نامناسبی نمایش داده می شه.

این موضوع چه دلیلی داره؟

Mr.Moghadam
یک شنبه 19 دی 1389, 15:15 عصر
سلام دوست عزیز

قبلش اینجا (http://barnamenevis.org/showthread.php?266397-%D8%A8%D8%A7-%D8%A7%DA%86-%D8%AA%DB%8C-%D8%A7%DA%A9%D8%B3%D8%B3-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%A7%DB%8C%D9%86-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B1%D9%88-%DA%A9%D9%88%D8%AA%D8%A7%D9%87%D8%B4-%DA%A9%D9%86%D9%85%D8%9F)رو بخون

دلیلش اینه که شما بعد از استفاده از مود ریرایت باید آدرس فایلهایی رو که اینکلود میکنین به صورت کامل بدین.

یه سرچ تو انجمن بزنی زیاد این سوال مطرح شده
موفق یاشی

phpweb
یک شنبه 19 دی 1389, 18:40 عصر
سلام دوست عزیز

قبلش اینجا (http://barnamenevis.org/showthread.php?266397-%D8%A8%D8%A7-%D8%A7%DA%86-%D8%AA%DB%8C-%D8%A7%DA%A9%D8%B3%D8%B3-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%A7%DB%8C%D9%86-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B1%D9%88-%DA%A9%D9%88%D8%AA%D8%A7%D9%87%D8%B4-%DA%A9%D9%86%D9%85%D8%9F)رو بخون

دلیلش اینه که شما بعد از استفاده از مود ریرایت باید آدرس فایلهایی رو که اینکلود میکنین به صورت کامل بدین.

یه سرچ تو انجمن بزنی زیاد این سوال مطرح شده
موفق یاشی


قبلا سرچ کرده بودم ولی به جواب نرسیدم.

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


<base href="http://localhost/test/" />

با توجه به پستهای دیگه و اینکه کسی به این مطلب اشاره نکرده بود، می خوام بدونم که استفاده از این تگ اصولی هست یا نه؟

phpweb
دوشنبه 20 دی 1389, 01:39 صبح
کد زیر به چه معنی هست؟


RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /A.JPG [NC,L]

eshpilen
سه شنبه 21 دی 1389, 00:03 صبح
ظاهرا بررسی میکنه که آدرس وارد شده نهایتا به یک فایل غیرخالی ختم میشه، یا یک symbolic link (یک نوع فایل مانند فایلهای شورتکات ویندوزی)، یا اینکه یک دایرکتوری روی سرور؛ یعنی یکی از این شرایط باید برقرار بشه تا دستور RewriteRule اجرا بشه. بعد اگر یکی از این شرایط برقرار بود، RewriteRule اول میگه که هیچ کاری نکن (آدرس تغییری نمیکنه). اما اگر شرایط مورد نظر برقرار نبودن و در نتیجه RewriteRule اول اجرا نشد، RewriteRule بعدی آدرس رو به آدرس یک تصویر که در دایرکتوری ریشهء وب سرور قرار داره تبدیل میکنه. ضمنا اون L ها که میبینید، به آپاچی میگه که اگر این دستور RewriteRule اجرا شد، بقیهء دستورات RewriteRule رو اجرا نکن. چون آدرسی که توسط RewriteRule فعلی تغییر پیدا کرده میتونه مجددا توسط شرطها و RewriteRule های بعدی هم بررسی و دستکاری بشه.
به زبان ساده میشه گفت این دستورات در نهایت اگر آدرسی که درخواست شده بود در سرور وجود نداشت، باعث نمایش یک تصویر برای کاربر میشن. یعنی یه چیزی شبیه خطای 404، منتها بصورت تصویر!

البته این تاجایی بود که بنده فهمیدم و تونستم در همین مدت و با عجله این دستورات رو با توجه به رفرنس mod_rewrite تحلیل کنم. پس احتمال داره جایی اشتباه کرده باشم!
راستی این دستورات بیشتر شبیه تمرین و مثال بنظر میان. از کجا آوردین؟

phpweb
سه شنبه 21 دی 1389, 00:48 صبح
ظاهرا بررسی میکنه که آدرس وارد شده نهایتا به یک فایل ختم میشه، یا یک symbolic link (یک نوع فایل مانند فایلهای شورتکات ویندوزی)، یا اینکه یک دایرکتوری روی سرور؛ یعنی یکی از این شرایط باید برقرار بشه تا دستور RewriteRule اجرا بشه. بعد اگر یکی از این شرایط برقرار بود، RewriteRule اول میگه که هیچ کاری نکن (آدرس تغییری نمیکنه). اما اگر شرایط مورد نظر برقرار نبودن و در نتیجه RewriteRule اول اجرا نشد، RewriteRule بعدی آدرس رو به آدرس یک تصویر که در دایرکتوری ریشهء وب سرور قرار داره تبدیل میکنه. ضمنا اون L ها که میبینید، به آپاچی میگه که اگر این دستور RewriteRule اجرا شد، بقیهء دستورات RewriteRule رو اجرا نکن. چون آدرسی که توسط RewriteRule فعلی تغییر پیدا کرده میتونه مجددا توسط شرطها و RewriteRule های بعدی هم بررسی و دستکاری بشه.
به زبان ساده میشه گفت این دستورات در نهایت اگر آدرسی که درخواست شده بود در سرور وجود نداشت، باعث نمایش یک تصویر برای کاربر میشن. یعنی یه چیزی مثل خطای 404، منتها بصورت تصویر!

البته این تاجایی بود که بنده فهمیدم و تونستم در همین مدت و با عجله این دستورات رو با توجه به رفرنس mod_rewrite تحلیل کنم. پس احتمال داره جایی اشتباه کرده باشم!
راستی این دستورات بیشتر شبیه تمرین و مثال بنظر میان. از کجا آوردین؟


دارم تمرین می کنم.

می شه آدرس رفرنس mod_rewrite رو برام ارسال کنید.

رضا قربانی
سه شنبه 21 دی 1389, 00:55 صبح
من از دستور زیر توی فایل htaccess استفاده می کنم تا بتونم لینکهای سایتم رو به شکل دلخواه توی آدرس بار نشون بدم.


RewriteEngine On
RewriteRule ^index/([0-9]*)/([0-9]+)$ index.php?id=$1&name=$2 [L]]

همه چیز به خوبی کار می کنه، بغیر از اینکه فایلهای خارجی مثل لینکهای خارجی سی اس اس لود نمی شن و در نتیجه ظاهر صفحه بشکل نامناسبی نمایش داده می شه.

این موضوع چه دلیلی داره؟


منم مشکل شما رو داشتم

شما باید آدرس فراخوانی CSS که در بین دو تگ<Head> قرار داره رو به طور کامل بدید
مثلا اینطوری
http://localhost/folder/style.css (http://localhost/misc.php?do=page&template=form)

بعد تمامی لینک هاتون و تمامی عکساتون هم باید به صورت بالا فراخوانی کنید(یعنی به صورت کامل)

http://localhost/folder/img1.jpg (http://localhost/misc.php?do=page&template=form)

پس چی شد : باید تمامی آدرس هاتون رو که توی تمامی فایل هاتون هست دستکاری کنید و آدرس هاشون رو به طور کامل بدید:متفکر:

موفق باشی دوست من:چشمک:

eshpilen
سه شنبه 21 دی 1389, 01:16 صبح
می شه آدرس رفرنس mod_rewrite رو برام ارسال کنید.
بنظرم اینجا صفحهء مقدمهء این مبحث هست: http://httpd.apache.org/docs/2.2/rewrite/
که لینک های مراحل بعد در اون درج شدن.

phpweb
سه شنبه 21 دی 1389, 01:47 صبح
بنظرم اینجا صفحهء مقدمهء این مبحث هست: http://httpd.apache.org/docs/2.2/rewrite/
که لینک های مراحل بعد در اون درج شدن.

این صفحه انگلیسی هست. یه منبع فارسی سراغ ندارید؟

eshpilen
سه شنبه 21 دی 1389, 10:30 صبح
خیر.
البته یه PDF جدیدا در همین فروم گذاشته بودن، ولی خیلی مختصر و ناقص هست درمقابل رفرنس اصلی.