parsgreen.com
article

نحوه دوباره نویسی لینک (url rewrite) در htaccess

web-url-rewrite

دوباره نویسی لینک ها (آدرس های اینترنتی) یا (url rewrite)، تکنیکی است که اغلب توسط آگاهان علم سئو (Search Engine Optimization)، توصیه شده و مورد استفاده قرار می گیرد، چرا که امروزه اغلب آدرس های اینترنتی به دلیل اینکه به صورت داینامیک و مبتنی بر پایگاه داده ایجاد می شوند، دارای متغیر ها و مقادیر مربوط به پرس و جوی پایگاه داده هستند، مثلا در بیشتر سیستم هایی که به زبان php یا asp نوشته می شوند، در بین لینک ها باید از علامت ? و = استفاده شود و این چیزی است که به گفته آگاهان، علم سئو آن را نمی پسندد، البته اینکه واقعا لینک های داینامیک در مقابل لینک های استاتیک تا چه میزان روی عملکرد یک سایت تاثیر گذار است، خود جای بحث دارد، اما به دلایل دیگر شاید هنوز ضرورت استفاده از لینک های استاتیک احساس شود، به هر صورت این مطلب را به آموزش نحوه دوباره نویسی لینک (url rewrite) در htaccess اختصاص داده ایم.

ضرورت استفاده از لینک های استاتیک


شاید در ذهن خیلی از برنامه نویسان وب و مدیران سایت ها، این سوال وجود داشته باشد که آیا باید حتما از لینک های استاتیک استفاده شود؟ پاسخ به این پرسش بستگی زیادی به هدف و میزان تسلط و آشنایی شما با برنامه ای است که از آن برای مدیریت سایت خود استفاده می کنید، دلایلی برای استفاده از لینک های استاتیک ارائه می شود از جمله اینکه به لحاظ حفظ امنیت این گونه لینک ها از ضریب اطمینان بالاتری برخوردارند، چرا که لینک های داینامیک معمولا ساختار مشخصی دارند و این ساختار در معرض دید کاربران است، اما با دوباره نویسی آدرس ها، ساختار لینک ها تا حدود بسیار زیادی پیچیده و نامفهوم می شود، دلیل دیگر کوتاه شدن لینک و حذف علامت های ?، & و = از آن است، البته پیش تر تصور بر این بود که موتورهای جستجو قادر به ایندکس صفحات داینامیک نیستند که البته در حال حاضر این تصور کاملا اشتباه است، تمام موتورهای جستجوی معروف به خوبی لینک های داینامیک را ایندکس می کنند، منتها لینک های استاتیک به دلیل کوتاه تر بودن و حذف موارد زائد، توصیه شده اند، مزیت بعدی که گفته می شود این است که لینک های استاتیک راحت تر به خاطر سپرده می شوند و در موتور های جستجو، آمار کلیک بهتری کسب می کنند، البته قسمت اول این گفته بستگی زیادی به تعداد کاراکتر یک لینک دارد (هر چه کوتاه تر، بهتر) و قسمت دوم نیز بین یک لینک داینامیک با پارامترهای مناسب و کوتاه و یک لینک استاتیک مشابه، آنچنان فرق محسوسی نیست؛ حال با این تفاسیر کدام روش را انتخاب کنیم؟ همانطور که گفتیم این امر بستگی زیادی به هدف شما دارد، اگر به فرض رقابت با سایرین از لحاظ جذب بازدید کننده برایتان اهمیت زیادی دارد و سایر اصول مربوط به بهینه سازی را نیز رعایت کرده اید، توصیه می کنیم این یک مورد را هم فرا بگیرید و با رعایت اصول و جوانب فنی، از آن استفاده نمائید، اما اگر به طور مثال یک سایت اداری یا شخصی را مدیریت می کنید و جوانب امنیتی پایگاه داده را هم رعایت کرده اید، دوباره نویسی لینک ها چندان ضرورتی نخواهد داشت، کما اینکه بسیاری از سایت های موفق هستند که از لینک های داینامیک استفاده می کنند و مشکل خاصی نیز برای آنها از این لحاظ پیش نمی آید، بنابراین همه چیز بستگی به خودتان دارد.

نکاتی که در دوباره نویسی  لینک (url rewrite) باید رعایت کنیم


باید یادآور شویم که دوباره نویسی لینک های داینامیک (url rewrite) کار حساسی است و باید با دقت و تسلط کامل انجام شود، اشتباه در این خصوص ممکن است باعث بروز مشکلاتی از جمله ایجاد مطالب تکراری (duplicate content) و یا موجب اختلال در عملکرد سایت شود، البته خوشبختانه تغییرات فایل htaccess به سرعت قابل بازگشت به حالت سابق است، چون سرور در هربار پردازش اطلاعات، آن را به طور مجدد فرا می خواند؛ اما با این حال این کار باید با در نظر گرفتن تمام احتمالات و آزمایش های قبلی صورت گیرد.

آشنایی با mod_rewrite در سرور Apache


دوباره نویسی یا  rewrite لینک ها در سرورهای لینوکسی Apache با ماژولی به نام mod_rewrite انجام می شود، این ماژول تقریبا یکی از محبوب ترین، قدرتمند ترین و پرکاربردی ترین ها در این نوع سرورها محسوب می شود، قدرت mod_rewrite در حدی است که هر نوع دستکاری در ساختار لینک های سایت توسط آن میسر می شود، اصول کار این ماژول بر اساس عبارات با قاعده یا Regular Expressions است که قوانین خاصی در آن با این روش تعریف می شود (RewriteRule)، اگرچه گستره قواعد و خاصیت های این ماژول بسیار زیاد است، اما برای استفاده های معمول، می توان با فراگیری چند تکنیک ساده، نیازهای خود را برطرف نمود؛ این قابلیت در بیشتر سرورهای Apache به صورت پیش فرض فعال است، اما اگر هاست شما از آن پشتیبانی نمی کند، می توانید موضوع را با پشتیبان خود مطرح کنید، نصب و استفاده از این ماژول بسیار آسان و پرکاربرد است و معمولا هاست ها آن را فعال می کنند.

mod_rewrite در سرور ویندوز


در سرورهای ویندوز، ماژول mod_rewrite وجود ندارد، ولی با پلاگین های دیگری می توان عملیات دوباره نویسی لینک ها را شبیه سازی کرد، به فرض پلاگینی با نام  ISAPI_Rewrite در سرورهای ویندوز می تواند رهگشا باشد.

نحوه دوباره نویسی لینک (url rewrite)


برای دوباره نویسی آدرس های وب، قبل از هر چیز به یک فایل متنی ساده به نام htaccess. (به همین صورت، با پسوند htaccess و بدون نام) در ریشه سایت خود (پوشه www یا public_html) نیاز خواهیم داشت، اگر فایل htaccess. به طور پیش فرض در سرور شما وجود ندارد، می توانید به راحتی آن را ایجاد کنید، دقت کنید که نقل و انتقال این فایل به سرور باید به صورت ASCII انجام شود، نه باینری (BINARY)، سپس مطابق نیاز خود باید دستوراتی که در ادامه خواهیم گفت را در آن درج و تنظیم نمائید.
اجازه دهید آموزش را با یک مثال ادامه دهیم، فرض کنید آدرس زیر را می خواهیم دوباره نویسی کنیم.
http://yoursite.com/index.php?q=home
هدف ما این است که آدرس بالا را به صورت زیر درآوریم، یعنی با وارد کردن آدرس زیر، در واقع سرور پارامترهای لینک بالا را در پس زمینه و به طور پنهانی دریافت کند.
http://yoursite.com/home
بدین منظور ابتدا ماژول mod_rewrite را روشن می کنیم، سپس از قوانین آن استفاده کرده و با عبارات با قاعده (در ادامه بیشتر خواهیم گفت)، یک قانون (RewriteRule) می نویسیم تا وقتی سرور لینک درخواستی را با آن مطابقت داد، قانون ما عمل کرده و لینک اصلی در پس زمینه دریافت شود.
RewriteEngine On
RewriteRule ^home /index.php?q=home [NC,L]
با کپی عبارت بالا در فایل htaccess. و قرار دادن آن در ریشه سایت، سرور آدرس دریافتی را بررسی و اگر با قانون تعریف شده مطابقت داشته باشد، لینک اصلی را تعریف می کند، اگر این کار را درست انجام ندهید، معمولا خطای داخلی سرور با کد 500 یا همان HTTP Error 500 Internal server error را دریافت خواهید کرد.
قانون بالا از دو قسمت تشکیل شده است، در بخش اول شرایط لینک دریافتی بررسی می شود، اگر با الگو (pattern) مطابقت داشت، لینک استاتیک دریافتی تبدیل به لینک داینامیک قسمت دوم (substitution یا جانشین) می شود، در واقع اگر در لینک استاتیک عبارت home وجود داشته باشد، سرور آن را به صورت  index.php?q=home شناسایی می کند؛ علامت های شبیه ^ معنی خاصی دارند که به آنها در اصطلاح عبارات با قاعده یا Regular Expressions می گویند، حروف [NC,L] نیز معانی خاصی در زمینه نحوه پردازش قوانین دارند و با این روش نوع اعمال قوانین را به سرور تفهیم می کنیم، به طور مثال NC به معنی case-insensitive یا حساس نبودن به حروف بزرگ و کوچک است، یا حرف L به معنی Last و آخرین است، یعنی اگر این قانون اجرا شد، بقیه قوانین بعد از آن نادیده گرفته می شوند، به این حروف در اصطلاح نشانه ها یا Flags می گویند.

توضیح مختصر عبارات با قاعده در htaccess


برای کاربرد صحیح قوانین دوباره نویسی، باید آشنایی مختصری با عبارات با قاعده داشته باشیم، در زیر چند عبارت پرکاربرد همراه معنی آن ذکر شده است.
Anchors یا لنگرها: لنگرها شروع و پایان یک رشته را مشخص می کنند، به فرض الگوی زیر، به معنی کلیه لینک هایی است که بعد از آدرس سایت، قسمت دوم آنها، با اعداد (0 تا 9) شروع می شود.
^([0-9]+)/
الگوی بالا با لینک فرضی زیر مطابق خواهد بود.
http://www.yoursite.com/143231/
علامت ^ هر آنچه پیش از آن آمده باشد را شامل می شود، همچنین است علامت $ که به معنی پایان یک رشته است.
دسته بندی ها یا Character Classes: نوع دیگر از حروف با قاعده با علامت های w ،s ،W ، d و... (حساس به حروف بزرگ یا کوچک) تعریف می شوند، به فرض علامت d\ با اعداد (0-9) مطابقت دارد، یا w\ به معنی حروف و اعداد انگلیسی است، همچنین W\ شامل همه چیز به جزء حروف و اعداد می شود، s\ (با حروف کوچک) نیز به معنی فضای خالی است.
تاکیدات یا Assertions: یک نوع دیگر از عبارات با قاعده، تاکیدات هستند، به اینصورت که اگر به فرض لینک دریافتی را برای وجود حرف a بررسی کرده و در عین حال بخواهیم بعد از حرف a کلمه فرضی book نیز نیامده باشد، خواهیم نوشت:
[^\S]*a(?!book)[^\S]*
قسمت مربوط به حرف S (با حروف بزرگ) در اینجا به معنی عدم فاصله خالی در عبارت است، سپس وجود حرف a بررسی می شود و بعد از آن، عدم وجود کلمه book و سپس نبودن فضای خالی، اگر لینک ارسالی از این الگو پیروی کند، قسمت دوم قانون اجرا می شود.
گروه و حدود: یکی از پر کاربرد ترین عبارات با قاعده گروه ها و حدود هستند، به فرض اگر بخواهیم بررسی کنیم که آیا در رشته ای، عباراتی بین اعداد 0 تا 9 یا حروف a تا z قرار دارد یا خیر، خواهیم نوشت:
[^A-Za-z0-9]
علامت یا (|): علامت یا (|) نیز در عبارات با قاعده کاربرد زیادی دارد، به فرض عبارت زیر به معنی وجود حروف web یا goo در رشته ارسالی است.
(web|goo)
در واقع عبارات با قاعده تنوع زیادی دارند و یادگیری تمام آنها در این مطلب نمی گنجد، در اینجا هدف فقط، آشنایی نسبی شما با عملکرد و منظور از به کارگیری آنها است.

چند مثال کاربردی برای دوباره نویسی آدرس های وب


به دلیل پیچیده به نظر رسیدن موضوع در نگاه اول، شاید بهترین روش برای یادگیری نحوه دوباره نویسی لینک ها در htaccess، استفاده از مثال های کاربردی باشد، با این شیوه هم با نحوه اعمال دستورات آشنا خواهیم شد و هم می توانیم از مثال ها، در برنامه خود استفاده کنیم.

- انتقال آدرس از index.html به index.php


RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html
RewriteRule ^index\.html$ http://yoursite.com/index.php [R=301,L]
RewriteCond در واقع نقش دستورات شرطی را در mod_rewrite بازی می کند، همانطور که ملاحظه می کنید، پارامتر THE_REQUEST نیز در این ماژول قابل دسترسی است، این پارامتر همان قسمت بعد از آدرس اصلی سایت، در یک لینک درخواستی است (در اینجا index.html)، کد بالا به این نحو تفسیر می شود:
اگر در لینک درخواستی، حروف A تا Z یا اعداد 0 تا 9 وجود داشت و برابر با index.html بود، قانون بعدی اجرا شده و با R=301 که به معنی ریدایرکت همیشگی یا (Moved Permanently) است، کاربر به آدرس http://yoursite.com/index.php منتقل شود.
علامت $ یک نوع لنگر و به معنی پایان یک عبارت است (برعکس ^ و در انتهای عبارت).

- دوباره نویسی آدرس داینامیک با یک پارامتر متنی


در این مثال یک آدرس داینامیک را که یک متغیر متنی دارد، دوباره نویسی می کنیم.
RewriteEngine On
RewriteRule ^category/([^/]+) /?category=$1 [NC,L]
در این مثال لینک فرضی http//yoursite.com/category/learn در سرور به صورت http//yoursite.com/?category=learn تبدیل می شود، همانطور که ملاحظه می کنید، قسمت دوم الگو (کلمه learn) به صورت 1$ برای حالت داینامیک تنظیم می شود که این یک قانون تعریف شده در mod_rewrite برای تعیین متغیر ها و مقادیر آنها است.

- دوباره نویسی آدرس داینامیک با یک پارامتر عددی


در این مثال یک آدرس داینامیک را که یک متغیر عددی دارد، دوباره نویسی می کنیم.
RewriteEngine On
RewriteRule ^category/([0-9]+) /?category=$1 [NC,L]
به فرض لینک http//yoursite.com/category/5 به صورت http//yoursite.com/?category=5 دریافت می شود.

- دوباره نویسی یک آدرس داینامیک با دو پارامتر متنی و عددی


در این مثال یک آدرس داینامیک را که دو متغیر متنی و عددی دارد، دوباره نویسی می کنیم.
RewriteEngine On
RewriteRule ^category/([0-9]+)/([^/]+) /?category=$1&title=$2 [NC,L]
دستور بالا به فرض لینک http//yoursite.com/category/5/learn-web را به صورت http//yoursite.com/?category=5&title=learn-web دوباره نویسی خواهد کرد.

- انتقال از آدرس های غیر اصلی به آدرس اصلی


در مثال زیر، دستوری را تنظیم کرده ایم که با آن، اگر کاربر در لینک ورودی عبارت www را تایپ نکرده باشد، او را به آدرس با www هدایت کنیم.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.yoursite\.com$ [NC]
RewriteRule .? http://www.yoursite.com%{REQUEST_URI} [R=301,L]
دستورات HTTP_HOST، REQUEST_URI مربوط به سربرگ های HTTP و سرور Apache هستند، نمونه آنها را در php نیز دیده ایم، به فرض HTTP_HOST در واقع آدرس اصلی سایت است، یا REQUEST_URI قسمت بعد از آدرس سایت است که توسط کاربر درخواست می شود.
همانطور که گفتیم، دوباره نویسی لینک ها باید با دقت بالا انجام شود، اشتباه در نحوه چینش قانون ها، مخصوصا در مورد قوانین مشابه، ممکن است موجب بروز اختلال در عملکرد سایت شده، یا سبب بروز مشکل مطالب تکراری (duplicate content) گردد، بهتر است در این خصوص بر تکنیک ریدایرکت 301 (Moved Permanently) نیز تسلط کافی داشته باشید و قبل از اعمال تغییرات در ساختار لینک های سایت، حتما همه ی جوانب را تست کنید.
sectionدسته بندی: مهارتهای وب » بهینه سازی
related مطالب بیشتر:
» رتبه بندی الکسا (Alexa) چیست و چقدر اهمیت دارد؟!
» حل مشکل مطالب تکراری (duplicate content) در سایت
» نحوه استفاده از فایل robots.txt در سایت
» مشکلات رایج در کدنویسی معتبر و رفع آنها
» مقایسه خطای 404 و کد 301 ریدایرکت (redirect)
commentنظرات (۱۲۹ یادداشت برای این مطلب ارسال شده است)
نویسنده: بهار
زمان: ۲۳:۱۹:۰۹ - تاریخ: ۱۳۹۱/۰۵/۰۵
خيلي مفيد بود. ممنون
نویسنده: Mahdi
زمان: ۱۳:۲۴:۴۶ - تاریخ: ۱۳۹۱/۰۸/۲۴
مطلب خوبی بود
نویسنده: فرشاد
زمان: ۲۳:۱۵:۵۳ - تاریخ: ۱۳۹۱/۱۰/۲۶
به فرض من یک آدرس به این شکل داشته باشم:
http://yoursite.com/index.php
اگه بخوام به این دو صورت ازش استفاده کنم , چیکار باید کنم؟
http://yoursite.com/index?page=about
http://yoursite.com/?page=about
میخوام بعد از ریرایت کردن به دلخواه هر چقدر که میخوام کواِری استرینگ استفاده کنم.
پاسخ: 
در مورد سوال شما تا آنجا که می دانیم دوباره نویسی یک آدرس به دو صورت ممکن و متداول نیست (چون تنها یکی از قوانین اجرا می شود) اما دوباره نویسی دو آدرس به یک صورت ممکن است (چون در نهایت یک قانون و لذا یک لینک خواهیم داشت)! حال مورد شما ظاهرا حالت اول است و لذا ممکن نیست، اما با یک قانون می توان آن را نوشت:
RewriteEngine On
RewriteRule ^index\.php$ http://yoursite.com/?page=about&q=test&q2=test2 [NC,L]
نویسنده: محمد
زمان: ۲۲:۴۴:۲۹ - تاریخ: ۱۳۹۱/۱۱/۱۲
سلام
من میخواهم سایتم را به سرور ویندوز منتقل کنم
نحوه rewrite با web.config رو توضیح بدین لطفا
ضروریه
پاسخ: 
سلام
لطفا در این خصوص به سایت های مرتبط با asp.net مراجعه کنید، متاسفانه در این زمینه فعالیتی نداریم.
نویسنده: حمید
زمان: ۲۰:۲۷:۵۴ - تاریخ: ۱۳۹۲/۰۱/۱۶
سلام
توی ومپ سرور اگه بخوام در localhost/dentist/nobat.php nobat.php رو نشان نده اومدم یه فایل .htaccess در پوشه www ایجاد کردم و توش این کد رو نوشتم :
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /nobat\.php
RewriteRule ^nobat\.php$ http://localhost/dentist [R=301,L]
ولی جوابی نمیگیرم و دوباره localhost/dentist/nobat.php
میاد
لطفا اگه کد مشکل داره راهنمایی کنین
ممنون
پاسخ: 
سلام
ابتدا باید mod_rewrite را در WampServer فعال کنید، برای این کار بر روی آیکن آن در نوار وظیفه کلیک کنید و از پنجره ظاهر شده قسمت Apache را انتخاب و از زیرمجموعه آن، فایل httpd.conf را باز کنید، در این فایل به دنبال خط زیر بگردید:
#LoadModule rewrite_module modules/mod_rewrite.so
پس از پیدا کردن این خط، علامت # را از ابتدای آن پاک کنید، فایل را ذخیره کرده و کلیه سرویس های WampServer را ریست کنید.
اکنون از نمونه دستور زیر استفاده نمائید:
RewriteEngine On
RewriteRule ^dentist/nobat /dentist/nobat.php [NC,L]
به این ترتیب لینک localhost/dentist/nobat برای سرور برابر است با لینک localhost/dentist/nobat.php.
نویسنده: حمید
زمان: ۲۳:۲۶:۲۹ - تاریخ: ۱۳۹۲/۰۱/۱۶
سلام
همه کارهایی که گفتین رو انجام دادم ولی این خطا رو میده:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
پاسخ: 
سلام
در ادامه مراحل قبلی این کار را نیز انجام دهید، بر روی آیکن کلیک کنید و از منوی ظاهر شده Apache و سپس Apache modules را انتخاب کنید، در این قسمت تیک گزینه rewrite_module را (در صورت فعال نبودن) فعال کنید.
اگر سرویس ها به صورت خودکار ریست نشدند، به صورت دستی این کار را انجام دهید.
مشابه مراحل گفته شده، قابلیت headers_module را نیز فعال کنید.
LoadModule headers_module modules/mod_headers.so
نویسنده: حمید
زمان: ۲۳:۲۸:۵۳ - تاریخ: ۱۳۹۲/۰۱/۱۶
در ضمن میخوام اصلا nobat رو هم نشون نده
پاسخ: 
می توانید پارامتر را حذف کنید یا نام آن را تغییر دهید، البته باید دقت کنید که در دستورات یا فایل های بعدی خللی وارد نشود:
RewriteEngine On
RewriteRule ^dentist /dentist/nobat.php [NC,L]
به این ترتیب لینک localhost/dentist برای سرور برابر است با لینک localhost/dentist/nobat.php.
نویسنده: حمید
زمان: ۲۰:۳۷:۱۲ - تاریخ: ۱۳۹۲/۰۱/۱۷
سلام
ببخشید میتونم توی هاست رایگان 000webhost هم در .htaccess این کد رو بنویسم؟؟؟
RewriteEngine On
RewriteRule ^dentist /dentist/nobat.php [NC,L]
پاسخ: 
سلام
ظاهرا که htaccess support جزء امکانات آن عنوان شده است.
نویسنده: حمید
زمان: ۲۳:۳۳:۵۸ - تاریخ: ۱۳۹۲/۰۱/۱۸
سلام
آدرس سایت من seyednet.comeze.com/nobat.php هست حالا میخوام nobat.php رو نشون نده میخواستم بدونم داخل htaccess. دقیقا چی بنویسم؟؟
پاسخ: 
سلام
کافی است نام فایل را به index.php تبدیل کنید.
نویسنده: حمید
زمان: ۲۳:۴۴:۴۸ - تاریخ: ۱۳۹۲/۰۱/۱۸
ضمنا داخل .htaccess در 000webhost اینو نوشته :
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
میتونم زیرش کد بنویسم؟؟؟
پاسخ: 
ظاهرا که می توانید، البته هاستینگ های رایگان معمولا مشکلات خاص خودشان را دارند.
نویسنده: فرزاد
زمان: ۰۰:۴۵:۱۳ - تاریخ: ۱۳۹۲/۰۲/۱۸
سلام
مشکلی که دارم اینه بعد از اجرای این کد, لینک های بعدی کوئری استرینگ تکراری می گیرند. یعنی duplicate میشه خود صفحه share.php
چی کار کنم فقط یکبار عمل ریرایت انجام بشه و تکراری نزنه واسه لینکای بعدی؟
RewriteRule ^sound/([^/]*)/([^/]*)$ /more.php?id=$1&title=$2 [L]
پاسخ: 
سلام
هرچند پاسخ دقیق به سوال شما نیازمند بررسی های بیشتر است، اما به نظر باید از الگوی زیر استفاده کنید:
RewriteRule ^sound/([^/]+)/([^/]+)$ /more.php?id=$1&title=$2 [L]
نویسنده: فرزاد
زمان: ۱۸:۰۵:۱۸ - تاریخ: ۱۳۹۲/۰۲/۱۸
آقا مشکلم رو فهمیدم.
بی دقتی از خودم بود.
مشکل از html بود. قبل از sound یه / نذاشته بودم. ممنون از سایت مفیدتون
نویسنده: مجید فلاح
زمان: ۲۰:۱۸:۳۸ - تاریخ: ۱۳۹۲/۰۲/۱۹
سلام
با htaccess چطور میتونم به فایل های داخل هاست دانلودم مثلا یه فایل mp3 یه mp4 این امکان رو به هر کاربری بدهم که بتونه با هر download manager این فایل ها رو دانلود کنه؟
مشکل اینجاست که مثلا با internet download manager نمیتونم دانلود کنم و error 403 forbidden permission میده.
یه نفر گفت این کارو کن:
AddType application/octet-stream .mp3
ولی این جواب نداد.
لطف کنین راهنمایی کنین و الگو بالا را هم اگه میشه توضیح بدین. ممنون
پاسخ: 
سلام
مرورگرها به صورت پیش فرض برخی فرمت ها را در بستر خود اجرا می کنند (به فرض تصاویر را نمایش می دهند و دانلود نمی کنند)، برای حالتی که نمی خواهیم این رفتار وجود داشته باشد، باید با دستورات htaccess و HTTP این موضوع را به آنها تفهیم کنیم، برای این کار، بر اساس فرمت های استاندارد MIME یا (Multipurpose Internet Mail Extensions) نوع جدیدی برای فرمت مورد نظر تعریف می کنیم، به فرض فرمت mp3 در استاندارد MIME به صورت audio/mpeg است، اما با دستور زیر نوع آن و در نتیجه رفتار مرورگر نسبت به آن تغییر می کند:
AddType application/octet-stream .mp3
البته برخی مرورگرها بدون توجه به پاسخ سرور، از روش های خاص خود برای تحلیل فایل ها استفاده می کنند، به هر صورت می توانید دستورات زیر را نیز امتحان کنید:
<IfModule mod_headers.c>
<FilesMatch "\.(mp3|MP3|mp4|MP4)$">
ForceType application/octet-stream
Header set Content-Disposition "attachment"
Allow from all
</FilesMatch>
</IfModule>
یا
<FilesMatch "\.(mp3|MP3|mp4|MP4)$">
ForceType application/octet-stream
Header set Content-Disposition "attachment"
Allow from all
</FilesMatch>
و یا
<FilesMatch "\.(mp3|MP3|mp4|MP4)$">
AddType application/octet-stream
Header set Content-Disposition "attachment"
Allow from all
</FilesMatch>
نکته: برای کارکرد صحیح این امکان، نیاز به فعال بودن mod_headers.c در سرور است.
توجه: اگر فایل شما به صورت مستقیم (بدون استفاده از برنامه های دانلود) نیز قابل دانلود نیست، لذا مشکل از مجوزها (permission) در هاست است و نه از برنامه های دانلود.
نویسنده: مجید فلاح
زمان: ۲۲:۵۴:۰۲ - تاریخ: ۱۳۹۲/۰۲/۱۹
سلام دوباره ;)
الگوی اول و که تست کردم error 500 server میده واسه mp3 فایلام
2 الگوی بعدی هم جواب نداد.
این را هم بگم لینک های من مثلا بدین صورته و فقط با browser دانلود میشه.
www.media.mysite.com/mp3/example.mp3
چیکار باید کنم؟
پاسخ: 
مجوزها (permission) فایل و فولدر آن را بررسی کنید که قابل دسترسی برای کاربر باشند (فایل 0644 و فولدر 0755) اگر مجوز بر روی این اعداد بود و همچنان خطا دریافت کردید، با هاست خود موضوع را مطرح کنید.
نویسنده: مجید فلاح
زمان: ۲۳:۴۶:۱۳ - تاریخ: ۱۳۹۲/۰۲/۱۹
ممنون بابت راهنمایی و کمکتون.
paged صفحه 1 از 9




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

1 × 7
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...