آگهی
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 مطالب بیشتر:
» حل مشکل محتوای تکراری (Duplicate Content) در سایت
» چرا برخی سایت ها و وبلاگ ها رتبه الکسای بهتری دارند؟
» پیج رنک چیست و چگونه می توان آن را افزایش داد؟
» رتبه بندی الکسا (Alexa) چیست و چقدر اهمیت دارد؟!
» نحوه استفاده از فایل robots.txt در سایت
commentنظرات (۱۶۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: رز سیاه
زمان: ۱۴:۴۹:۱۶ - تاریخ: ۱۳۹۳/۰۵/۲۴
سلام
خسته نباشید
یک مشکل بزرگ دارم
مشکل من
/?/
هست که نمیدونم چطور داخل فایل بزارم
این صفحه ی اصلی جستجو:
http://pr8.ir/new/?s=12345
صفحه ای که میخوام نمایش در بیاد:
http://pr8.ir/new/?/?s=66666
خیلی ممنون
پاسخ: 
سلام
استفاده از علامت ? در آدرس URL معنی خاصی دارد و برای ایجاد یک Query String یا قسمت پارامترها استفاده می شود، لذا برای حالتی که این کاراکتر باید به صورت غیر دستوری پردازش شود، می توان از مقدار کد شده آن استفاده کرد:
%3F
نکته 1: این مقدار کد شده صرفا باید در آدرس URL استفاده شود.
نکته 2: به طور کلی استفاده از علامت های خاص مانند ? در آدرس URL توصیه نمی شود.
نویسنده: امیر
زمان: ۱۸:۵۳:۵۸ - تاریخ: ۱۳۹۳/۰۵/۲۶
سلام
مطلب فوق العاده کاربردی و مفیدی بود.
از نویسنده تشکر می کنم.
نویسنده: Ali Zeus
زمان: ۱۴:۵۰:۱۸ - تاریخ: ۱۳۹۳/۰۵/۳۰
با سلام و تشکر از مطالب بسیار مفیدتون و چند سوال
//1 دات (.) به معنی هر چیزی است؟ مثال:
RewriteRule ^www.example.com/page.one = www.example.com/pageabcdone
//2 ایا میشه با اچ تی اکسز یک فایل را به تمام صفحات اینکلود کرد که قبل از بارگذاری صفحه مورد نظر (تمام صفحات سایت) دستورات (مثلا بستن مرورگر اپرا یا بستن ای پی و غیره) برسی بشه و اگه کاربر مجاز به ورود بود بتونه صفحات رو ببینه
//3 ایا میشه کدهای مثلا اچ تی ام ال رو (مثل اکهو کردن در پی اچ پی) برای اعمال در تمام صفحات سایت در اچ تی اکسز تعریف کرد؟
//4 کد زیر کارش چیه؟
Options +FollowSymLinks
در منبعی که معلوم بود نویسنده اگاهی چندانی از کار با فایل اچ تی اکسز نداشت نوشته بود شاید قبل از RewriteEngine On برای برخی هاست ها لازم باشه
واقعا ممنون
پاسخ: 
سلام
- بله، در عبارات با قاعده (Regular Expressions) نقطه نمایانگر هر کاراکتری است.
- آن طور که مد نظر شما است خیر! تنها می توانید دستوراتی بنویسید که متناسب با درخواست کاربر ابتدا یک فایل PHP اجرا شود، سپس از طریق آن فایل صفحات دیگر بارگذاری یا کاربر به صورت خودکار ریدایرکت شود، توضیح و درک این کار ساده نیست و به تجربه بالای شما نیاز دارد! بهتر است برای این هدف سیستم سایتتان را طوری طراحی کنید که تمام خروجی ها ابتدا از فیلتر یک فایل کنترل کننده بگذرند.
- خیر!
- این پارامترها در فایل htaccess جهت تعیین تنظیمات سرور به کار می روند، در حالت پیش فرض تنظیمات سرور از فایل httpd.conf ناشی می شود که برای تغییر آنها از htaccess استفاده می کنیم، به طور خلاصه Options تعیین کننده امکاناتی است که در سرور قابل استفاده هستند (مقدار پیش فرض All است)، FollowSymLinks مخفف Follow Symbolic Links یک قابلیت در سرور است که می توانید به کمک آن لینک های نمادین (soft links) داشته باشید! یعنی به طور مثال در خروجی، لینک به یک فایل داشته باشید که در واقع در سرور در آن دایرکتوری قرار ندارد، این پارامتر برای برخی موارد مانند حفظ امنیت سرور ممکن است کاربرد داشته باشد، برای تنظیم آن باید دستورات خاصی بنویسید که مجال طرح آنها در این قسمت نیست.
نویسنده: Ali Zeus
زمان: ۲۰:۱۲:۱۶ - تاریخ: ۱۳۹۳/۰۵/۳۰
با سلام مجدد و خسته نباشید
ممنون از توضیحاتتون
//در مورد مشکل اول و و پیچیدگی روشی که گفتین فکر کنم بهتره تا یک فایل رو در تمام صفحات اینکلود کنم و دستورات امنیتی رو درش بنویسم
//و در مورد Options +FollowSymLinks به این ترتیبی که شما توضیح دادید برای یک تغییر ساده لینک GET فکر نکنم لازم باشه
-- و با عرض پوزش یک سوال دیگر
مفهوم کاراکتر های ستاره و به علاوه و علامت سوال (? + *) چیست؟
در تبدیلی مثل
RewriteRule ^\(([^/]*)\)$ Profile.php?username=$1
با تغییر ستاره به به علاوه در ظاهر اتفاقی نمی افتد پس چه فرقی با هم دارند؟
و ایا این اسلش اظافه نیست؟
[^/]
ممنون
پاسخ: 
سلام
در مورد سوالات لطفا عبارت "آموزش کاربردی عبارات با قاعده Regular Expressions" را در وب یا "Regular Expressions" را در سایت جستجو کنید.
نویسنده: مرتضی
زمان: ۰۳:۱۶:۰۳ - تاریخ: ۱۳۹۳/۰۶/۰۱
سلام
میخوام وقتی
localhost/website/about
رو خواستم
localhost/website/about.php
اجرا و فرستاده بشه. برای این منظور این کد رو استفاده میکنم:
RewriteEngine On
RewriteRule ^about /website/about.php [NC,L]
ضمنا من از wampserver استفاده میکنم و ماژولهای rewrite_module و headers_module هم تیک خوردن اما ارور 404 Not Found میده!
لطفا راهنمایی کنین / متشکر
پاسخ: 
سلام
به ظاهر نباید مشکلی باشد، لذا مشکل تنها از طریق تست آنلاین با برنامه TeamViewer قابل تشخیص است.
نویسنده: یحیی
زمان: ۲۲:۲۰:۲۵ - تاریخ: ۱۳۹۳/۰۶/۰۴
با سلام کد زیر برای ارجاع به صفحه در صورتی که بعد از Localhost بیش از سه حرف نوشته شود چه مشکلی دارد که عمل نمیکنه و به صفحه error 404 میره
RewriteEngine On
RewriteRule ^localhost/[a-zA-z]{4} localhost/example.html [NC,L]
پاسخ: 
سلام
localhost نباید در دستورات باشد، لطفا به نمونه های موجود در آموزش حاضر توجه کنید.
نویسنده: محمود
زمان: ۰۵:۵۷:۱۵ - تاریخ: ۱۳۹۳/۰۶/۱۴
سلام
تبدیل این چی میشه:
# disable indexs
Options -Indexes
# disable direct download
deny from all
<Files ~ "\.(php)$">
order allow,deny
allow from all
</Files>
پاسخ: 
سلام
دستورات درج شده ارتباطی به دوباره نویسی لینک ندارند!
نویسنده: محمود
زمان: ۱۴:۳۹:۳۶ - تاریخ: ۱۳۹۳/۰۶/۱۴
منظورم اینه که اگه اینو بخواهیم ببریم تو web.config چطوری باید نوشت؟
چون با سایتهای آنلاین تبدیل htaccess به web.config نتونستم تبدیل کنم
پاسخ: 
لطفا به سایتهای مرتبط با ASP.NET مراجعه کنید!
نویسنده: علی
زمان: ۲۱:۱۵:۵۶ - تاریخ: ۱۳۹۳/۰۶/۲۸
سلام خسته نباشی
اقا من واسه بخش پروفایل سایتم مشکل پیدا کردم
امروز متوجه شدم که این مشکل رو داره
ادرس پروفایل کاربرام به این صورت هستش
www.sitename.com/Admin
الان متوجه شدم اگر نام کاربر همراه با عدد باشد به صفحه 404 منتقل میشه ساپورت نمیکنه
دستورات زیر رو نگاه کنید
RewriteCond %{REQUEST_URI} !^/zsystem|ads|contact|about|searchuser|register|login|rss|1|2|pm|terms|business|upload|indexmusic|indexvideo|indextext|ninjafirewall|dl
RewriteRule ^([^/.]+)(\\/)?$ pr.php?user=$1
کن کنم مشکل از pregmatch باشه
ممنون میشم راهنماییم کنید خودم زیاد از pregmatch سر در نمیارم ادم سرش گیج میره وقتی بهش نگاه میکنه
پاسخ: 
سلام
1|2
این قسمت باعث می شود هر عبارتی که داخل آن عدد 1 یا 2 باشد، غیر مجاز شده و در نتیجه صفحه 404 نمایش داده شود!
می توانید این قسمت را حذف کنید، البته ممکن است استفاده از این موارد دلیل امنیتی خاصی داشته باشد که این موضوع را بدون بررسی و داشتن آشنایی با برنامه مدیریت سایتتان نمی توان تشخیص داد.
نویسنده: علی
زمان: ۰۱:۱۶:۴۵ - تاریخ: ۱۳۹۳/۰۶/۲۹
راست میگی ها من چقدر بی دقتم
هم دست گلت درد نکنه هم مغز کمیابت
خلاصه فدای دست و پنجت حل شد
ممنون داداش بنر داری؟
میخوام ازت وب سایتت حمایت کنم
پاسخ: 
خیر، متاسفانه بنری در اختیار نداریم، در صورت تمایل به صورت لینک ساده می توانید این کار را انجام دهید.
نویسنده: علی
زمان: ۱۹:۰۳:۳۸ - تاریخ: ۱۳۹۳/۰۶/۳۱
سلام دوباره
چون از این دستورات استفاده کردم
RewriteCond %{REQUEST_URI} !^/zsystem|ads|contact|about|searchuser|register|login|rss|1|2|pm|terms|business|upload|indexmusic|indexvideo|indextext|ninjafirewall|dl
RewriteRule ^([^/.]+)(\\/)?$ pr.php?user=$1
الان وقتی یه ساب دامین میسازم گیر میده به فایل
RewriteRule ^([^/.]+)(\\/)?$ pr.php?user=$1
متن خطا :
The requested URL /pr.php was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
پاسخ: 
سلام
بدون تست آنلاین و درک دقیق مشکل نمی توان نظر خاصی داد!
در ظاهر فایل pr.php در ریشه سایتتان وجود ندارد، در حالی که به آن ارجاع داده شد، هدف از قانونی که نوشته اید هم به نظر کمی مبهم است! منظورتان تجزیه چه الگویی بوده؟!
نویسنده: علی
زمان: ۰۰:۳۲:۳۵ - تاریخ: ۱۳۹۳/۰۷/۰۱
شرمنده
اینم لینک اسکریپت 1 مگ حجمش هست
هر چند که فکر نکنم مشکل از اون باشه
حذف شد
پاسخ: 
دوست گرامی امکان نصب و تست اسکریپت کاربران میسر نیست، اگر مایل بودید اطلاعات یک اکانت موقت در سرور را ارسال کنید تا به صورت اجمالی و آنلاین بررسی گردد.
نویسنده: yokhsan
زمان: ۱۷:۳۵:۵۱ - تاریخ: ۱۳۹۳/۰۷/۲۳
با سلام و تشکر از مطالب مفیدتان
اگر در جوملا 3 در استفاده از کامپوننت کی 2 آدرسی شبیه به آدرس زیر داشته باشیم و بخواهیم که ساده تر بکنیم و به شکل پایین در بیاوریم به چه شیوه ای باید عمل کنیم؟
همچنین در پوشه نصب شده جوملا فایل htaccess.txt وجود دارد که عباراتی در ان نوشته شده است.
index.php/component/k2/item/14-record 
14 : آی دی مطلب record اسم مستعار مطلب به شکل زیر در بیآید
http//yoursite.com/item/14-record
یا
http//yoursite.com/14-record 
تعداد مطالب هم تقریبا زیاد خواهد بود.
پاسخ: 
سلام
قانون کلی کار همان است که گفته شده، منتها برای اعمال بر روی سیستم های مدیریت محتوا مانند جوملا باید به انجمن های پشتیبانی آنها مراجعه کنید، بدون آشنایی دقیق با ساختار CMS مورد نظر امکان بروز مشکلات متعددی وجود دارد، لذا افزونه باید توسط تیم های پشتیبانی یا افراد آشنا به ساختار جوملا تهیه شود.
نویسنده: aref
زمان: ۱۶:۱۸:۵۲ - تاریخ: ۱۳۹۳/۰۷/۲۸
سلام و تشکر از مطالب مفید و توضیحات دقیق که فقط در سایت شما پیدا میشه این مطالب.
یک سوال داشتم من یک لینک دارم به صورت زیر :
http://15338.dl3.srvdl.com/premium/658faf0d3a2192345a836e0deebf879a/5444f655/Serial/Seinfeld/S01/Seinfeld-S01E02_IMDB-DL.Com.mkv 
امکانش هست با htaccess کاری کنم که به لینک زیر برن لینک بالا لود بشه اما کاربر نبینه؟
http://name.com/Seinfeld-S01E02_IMDB-DL.Com.mkv
پاسخ: 
سلام
چنین امکانی وجود ندارد، مگر اینکه هر دو دامنه در یک سرور و یک حساب کاربری میزبانی شوند و آن هم با اعمال تنظیمات خاص و کدنویسی PHP ممکن است (دقیق تست نشده، اما به نظر به این شیوه امکانپذیر است!).
نویسنده: amin
زمان: ۱۶:۱۴:۲۳ - تاریخ: ۱۳۹۳/۰۸/۲۲
سلام استاد
آقا من میخوام آخر آدرس پست های سایتم علامت / اضافه کنم . اضافه هم کردم . ولی مخوام هر وقت این علامت / پاک شد به صورت اتوماتیک بهش اضافه شه
وقتی به این شکل نوشته میشه
http://localhost/tag/ماشین
به این شکل در بیاد آخرش / اضافه شه
http://localhost/tag/ماشین/
و این که اگر کسی آدرس زیر رو تو آدرس بار مرورگر وارد کرد
http://localhost/tag/
به آدرس دیگه بره
مرسی با تشکر
پاسخ: 
سلام
برای بخش اول سوال می توانید از نمونه دستورات زیر استفاده کنید:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>
برای بخش دوم سوال نمونه کد زیر قابل استفاده است:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /tag$
RewriteRule ^/tag$ /tag/your_word [R=301,L]
</IfModule>
نکته: کدها به صورت تئوری نوشته شده و تست نشده اند!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





9 × 5
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form سحر
در:
سلام من وقتی میخوام توی قسمت صفحات جداگانه وبلاگم گزینه ادامه مطلب رو بیارم باید چیکار کنم چون فقط قسمت نوشته جدید همچین قابلیتی...
۱۵:۰۸:۱۹ ۱۳۹۹/۰۳/۰۸

form علی
در:
با سلام و درود فراوان یه کد جاوا دارم می خوام هر ثانیه نام یه فایل یا پوشه ای رو بگیرم برای مقایسه تا...
۱۱:۰۶:۲۲ ۱۳۹۹/۰۳/۰۸

form علیرضا
در:
با سلام مجدد در پاسخ یکی از کامنت هایم فرمودین که جهت فراخوانی (اجرای) یک فایل در سرور راس ساعت مشخص و صرف...
۱۱:۲۸:۲۴ ۱۳۹۹/۰۳/۰۵

form علیرضا
در:
سلام اگر بخواهیم صفحات سایت رأس ساعت مشخصی مثلا ساعت 12 ظهر رفرش بشه چه کدی رو باید استفاده کنیم. ممنون
۰۴:۴۳:۴۷ ۱۳۹۹/۰۳/۰۵

form علی
در:
با سلام من یه فانکشن نوشتم چطور میشه از توی جاوااسکریپت اون رو صدا بزنم در حقیقت می خوام از توی جاوا یه فانکشنی...
۲۰:۵۹:۰۹ ۱۳۹۹/۰۳/۰۴

form رویا
در:
سلام. خسته نباشید من جدیدا در بلاگفا وبلاگی راه اندازی کردم اما مشکلی دارم. وقتی قسمتی از متن رو انتخاب میکنم و لینک میکنم،...
۱۹:۵۴:۰۰ ۱۳۹۹/۰۳/۰۴

form علی
در:
چطور میشه همزمان با کلیک بر روی «تعویض کد» یعنی کد زیر: پوشه ساخته بشه. با سپاس
۰۹:۵۰:۲۷ ۱۳۹۹/۰۳/۰۳

form علی
در:
با سلام... من یه متغیر تعریف کردم مثلا رو بهش متصل کنیم ممنون از پاسختون.
۰۶:۱۶:۲۷ ۱۳۹۹/۰۳/۰۳

form یاسمن
در:
سلام یه برنامه ای که رشته رو به عنوان password دریافت کنه و کاراکتر فاصله نباشد طول رشته هم از 8 تا 50 باشه عدد...
۱۸:۵۲:۴۴ ۱۳۹۹/۰۳/۰۲

form مرتضی ق
در:
سلام خسته نباشید. یک سایت اصلی و مادر دارم مثلا www.m.com حالا سه سایت دیگر زیر مجموعه مثلا m1 و m2 و m3 من...
۱۸:۲۵:۱۱ ۱۳۹۹/۰۳/۰۲

form میترا
در:
با سلام ببخشید مطلبتون خیلی خوب بود یه سوال من با فتوشاپ انلاین کار می کنم نمی دونم چرا نمی تونم باهاش...
۱۸:۱۵:۱۰ ۱۳۹۹/۰۳/۰۲

form fatemeh
در:
پاراگراف زیر را داریم. چه تنظیماتی در CSS و HTML نیاز است تا در صفحه وببدرستی نمایش داده شود؟ میشه برا جواب این سوال...
۱۶:۳۲:۲۳ ۱۳۹۹/۰۳/۰۱

form علی
در:
با سلام و عرض ادب من یه فانکشن تعریف کردم و کدهای فایل ajax-loading-message.php رو درونش گذاشتم
۰۸:۴۲:۲۱ ۱۳۹۹/۰۳/۰۱

form Maryam
در:
سلام .. من میخاستم کدی بنویسم که خروجی آن دکمه on .. of باشه که با زدن دکمه رنگ پس زمینه تغییر کند ممنون میشم...
۰۲:۲۱:۳۴ ۱۳۹۹/۰۲/۳۱

form amir
در:
سلام ممنون از سایت خوبتون چطور میشه با جاوااسکریپت ایجکس و پی اچ پی بتونم تمامی جدول های دیتابیس رو هر کدوم با یه...
۲۰:۴۵:۵۲ ۱۳۹۹/۰۲/۳۰
form علی
در:
با سلام و عرض ادب بسیار سایت پر محتوایی دارید تبریک... می خواستم بپرسم اگر بخواهیم مثلا کاربر روی یک لینکی در سایت...
۰۷:۲۲:۰۱ ۱۳۹۹/۰۲/۳۰
form Edward ASharp
در:
سلام میشه همين فایلای کاملشو به من بدید؟
۰۰:۰۲:۲۱ ۱۳۹۹/۰۲/۳۰
form میکاییل
در:
سلام من پروزه ای دارم با mvc نوشته شده و در روت سایت فایل htacsess دارم که کد های زیر توشه ...
۰۲:۳۰:۰۲ ۱۳۹۹/۰۲/۲۹
form mahdi
در:
سلام استاد عزیز ، این درسته که با node.js دیگه نیازی به یادگیری php نخواهیم داشت؟
۲۲:۳۹:۳۶ ۱۳۹۹/۰۲/۲۸
form امیر مهدی
در:
سلام ممنونم از اینکه کمکم کردید ولی من منو رو با زیر منوها می خواستم کد شما زیر منوها رو از بین برد. منظور من...
۲۲:۳۰:۱۵ ۱۳۹۹/۰۲/۲۸
form امیر مهدی
در:
سلام. من در طراحی منو سایت با مشکل برخوردم. من منو خودم رو ساختم و متوجه شدم که منو من مقداری فضا از سمت چپ...
۱۹:۲۴:۰۱ ۱۳۹۹/۰۲/۲۸
form امین
در:
خیلی خیلی ممنون از اینکه جواب دادید اما الان که امتحان کردم مجموع همه ی سفارشات رو میزنه یعنی اگر 3 نفر سفارش دادن...
۱۳:۴۶:۵۵ ۱۳۹۹/۰۲/۲۸
form امین
در:
درود به شما خسته نباشید یک سوال داشتم خیلی گشتم اما پیدا نکردم من دیتابیسی برای مثال invert دارم میخوام یک صفحه...
۰۱:۰۰:۴۵ ۱۳۹۹/۰۲/۲۸
form امیر
در:
عالی بود. سپاس گذارم
۱۰:۱۹:۴۴ ۱۳۹۹/۰۲/۲۷
form فرامرز اسماعیلی
در:
سلام خسته نباشید. من داخل ویرایشگرهای notepad++ یا Braket دستور html رو می نویسم یعنی فایل متنی به صورت index.html رو می خواهم اجرا کنم...
۲۲:۴۱:۴۳ ۱۳۹۹/۰۲/۲۶
form پری
در:
سلام بعضی از سایت ها وقتی اهنگ بعدی رو پلی میگنیم اهنگ قبلی که در حال پخش است به طور خودگار قطع میشود میشه این...
۱۴:۲۲:۲۵ ۱۳۹۹/۰۲/۲۶
form ilia Delbar
در:
خیلییییییییییی خوبه! فقط دلم می خواد یه برنامه درست کنم رنگ ها رو نشون بده (رنگ تگ ها)
۱۳:۱۵:۱۹ ۱۳۹۹/۰۲/۲۶
form زهیر صفری
در:
با سلام چطور میتونم تاریخ تولد فرد ایرانی رو بگیره مثلا از input و سن فرد رو در input بعدی نمایش بده میتونید...
۱۲:۳۸:۵۷ ۱۳۹۹/۰۲/۲۶
form حبیب
در:
با سلام بنده از طریق مودم خانه به اینترنت وصل شدم هم با کامپیوتر و هم با موبایل. اما ای پی در هر...
۰۳:۱۲:۵۴ ۱۳۹۹/۰۲/۲۶
form امین
در:
سلام خسته نباشید امیدوارم جوابمو بدید من داخل یک صفحه این کد جاوا رو دارم میخوام خروجی که میده رو داخل...
۱۳:۴۴:۳۳ ۱۳۹۹/۰۲/۲۵
form امیر هادی نجاتی
در:
ممنون از شما. این قسمت (استفاده از جاوا اسکریپت برای غیر فعال کردن کلیک راست) واقعا به دردم خورد .
۲۱:۰۳:۵۰ ۱۳۹۹/۰۲/۲۴
form لیلا
در:
سلام ، ببخشید من میخوام یک مدرک رو در سایت آپلود کنم ولی ارور زیر رو میده . میشه راهنماییم کنید. ممنون
۱۴:۵۲:۴۷ ۱۳۹۹/۰۲/۲۴
form زهرا جعفری
در:
با سلام بنده میخواهم در جاوااسکریپت یک textbox داشته باشم که در آن یک دکمه چشمک زن بذارم وسط متن و وقتی روی...
۱۰:۰۱:۵۱ ۱۳۹۹/۰۲/۲۴
form جواد
در:
سلام. مقادیر و اطلاعاتی از یک سایت دیگه با همین متد file get contents میگیرم که روی لوکال هاست سرعتش خوبه، روی سرور هم بد...
۲۲:۰۳:۲۲ ۱۳۹۹/۰۲/۲۳
form علی رضایی
در:
در خط آخر خطای نحوه ارسال آرگومان می دهد. خطای syntax است یا دستور مورد دارد؟
۱۳:۲۹:۴۹ ۱۳۹۹/۰۲/۲۳
form علی
در:
سلام میخوام مطالب مرتبط با موضوعات سایتم رو در پایین اونها نمایش بدم چجوری میتونم این کار رو بکنم
۰۱:۲۸:۰۰ ۱۳۹۹/۰۲/۲۳
form امیرحسین
در:
با سلام. من تو css میخوام از اتریبیوت border-radius استفاده کنم ولی وقتی مقدارشو مثلا توی div زیاد میذارم متن داخل div بیرون میاد میخواستم...
۱۹:۵۲:۳۰ ۱۳۹۹/۰۲/۲۲
form امیرعلی
در:
با سلام بنده میخواستم بدانم که میشود تگ div را با این روش ها پنهان کرد من میخواهم افزونه ی وردپرسی را...
۱۲:۳۹:۲۶ ۱۳۹۹/۰۲/۲۲
form یوسف رضایی
در:
با سلام و خسته نباشید خواستم بپرسم خروجی یک فرم (با چند گزینه) بر روی برووزر که اماده برای ارسال برای سرور هست را توی...
۱۱:۱۴:۰۳ ۱۳۹۹/۰۲/۲۲
form سعیده
در:
سلام من یه اهنگ که تو وبلاگم میزارم صفحه پخش اهنگ میاد و بلندگوش ولی اون مثلث پلی کنندش نمیاد یعنی عملا واسم...
۱۵:۴۱:۰۵ ۱۳۹۹/۰۲/۲۱
form مجید اسکندری فر
در:
سلام حدود 700 تصویر رو در وبلاگم بارگذاری کردم و حدود 6000 بازدید داشته علت عدم نمایش تصاویر بارگذاری شده در وبلاگم چیست؟ خیلی زحمت...
۱۰:۳۲:۴۵ ۱۳۹۹/۰۲/۲۱
form علیرضا
در:
سلام، ممنون از مطلب کاملتون یه نکته رو هم من اضافه کنم برای کاملتر شدن مقاله، هر آدرس آی پی از یک شناسه هاست...
۰۹:۳۷:۵۰ ۱۳۹۹/۰۲/۲۱
form mahdi
در:
سلام استاد عزیز ، خیلی ممنون از راهنمایی ، انجامشون میدم، فکر میکنم همه این کارارو بلد باشم فقط WYSIWYG رو اصلا نشنیده بودم که...
۰۷:۱۸:۳۷ ۱۳۹۹/۰۲/۲۱
form معصومه
در:
سلام، امروز دیدم که عکس های وبلاگم حذف شده چرا؟ چطور میتونم برشون گردونم؟ عکس ها رو از سایت پیکو فایل آپلود میکردم، هرچقدرم سعی...
۱۴:۵۳:۵۱ ۱۳۹۹/۰۲/۲۰
form mahdi
در:
سلام استاد عزیز و گرامی ، یه درخواستی داشتم ازتون میخوام اگه براتون ممکنه من رو در جاوا اسکریپت بسنجی که بدونم چیا بلدم...
۱۴:۱۸:۵۸ ۱۳۹۹/۰۲/۱۹
form امیر
در:
با سلام، خدمت دوستان عزیز دو جدول به نام‌های Messages و Comments موجود هستند. در جدول Comments فیلدی به نام IDElement وجود دارد که...
۰۵:۲۹:۳۸ ۱۳۹۹/۰۲/۱۹
form ehsan hoseini sianaki
در:
سلام خیلی عالی و کاربردی بود. خسته نباشید.
۲۳:۰۰:۵۱ ۱۳۹۹/۰۲/۱۷
form امید
در:
با سلام و عرض ادب فیلتری میخوام که تعداد جوابهای فیلترهای سایت tse بورس که با جاوا نوشته شده رو بگه مثلا قرار...
۰۰:۱۰:۵۱ ۱۳۹۹/۰۲/۱۷
form احسان
در:
سلام ببخشید من هر کار میکنم تو گوشی اندروید با Html یه عکس رو در سایت خودم بزارم هیچی نمیشه فقط یه علامت عکس میاد...
۲۲:۲۸:۳۷ ۱۳۹۹/۰۲/۱۶
form hasti
در:
سلام . وقت بخیر . میشه مثالی بزنید که right over join برابر با inner join (داخلی) بشه . /با order و customer/ ...
۲۰:۰۵:۱۷ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام مجدد من دیگه اینقدر با این کدها ور رفتم دیوونه شدم. این کل تابع منه. شما می تونید برای حل مشکلی که...
۱۷:۳۰:۳۱ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام در تکمیل سوالی که خدمت شما عرض شد: ببینید ما دو تا فیلد فایل داریم توی اولی عکس اپ میشه و توی...
۱۶:۲۶:۲۶ ۱۳۹۹/۰۲/۱۶
form ماردین
در:
سلام من میخواستم ببینم چکار کنم که اولین query رو بدون حذف بقیه query ها حذف کنم
۱۵:۵۲:۵۴ ۱۳۹۹/۰۲/۱۶
form میثم
در:
سلام یه سوال خدمت شما داشتم. من با جاوا اسکریپت میخوام بخش فایل توی فرمم رو چک کنم. توی فرم 2 تا فیلد...
۱۱:۴۷:۵۲ ۱۳۹۹/۰۲/۱۶
form amir mtf
در:
سلام ببخشید من میخواستم در تگ این‌پوت برخی از کلمات و علامت ها رو حذف کنم. یک درخواست دیگر هم دارم اگه میشه کد...
۱۲:۳۷:۰۵ ۱۳۹۹/۰۲/۱۵
form کیوان
در:
سلام ممنون از سایت خوبتون، من یه فرم دارم که اطلاعاتش رو از دیتابیس میگیره، چطور میتونم با نوشتن حلقه بعد از چاپ سه...
۱۸:۲۲:۲۴ ۱۳۹۹/۰۲/۱۳
form mohammad
در:
آموزشتون خیلی فهما و دقیق بود ممنون
۲۱:۵۵:۳۸ ۱۳۹۹/۰۲/۱۲
form محمودی
در:
سلام چطوری میتونم برای سایت ثبت نام کدبورسی و ثبت نام ارز دیجیتال بک لینک بگیرم
۱۵:۲۶:۰۷ ۱۳۹۹/۰۲/۱۲
در انتظار بررسی: ۰