PDA

View Full Version : سوال: توضیح کد های htaccess



ali_ab
جمعه 19 بهمن 1397, 20:45 عصر
سلام دوستان
شاید عنوان تایپیکم غلط باشه اما بنده سوالی دارم درباره کد های زیر که درون فایل htaccess هست و مربوط به وردپرس میشه




<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


اگر میشه این کد ها را خط به خط برای بنده توضیح بدید و بگید که هر کارکتر کارش چی هست مثلا توی خط سوم اصلا هیچ درکی از کاربرد کد [L] ندارم
اگه میشه توضیح بدید

تشکر

plague
شنبه 20 بهمن 1397, 15:54 عصر
اینجا میتونی بخونی توضیحات کامل رو

http://glennmessersmith.com/pages/wphtaccess.html


فلگ L یعنی LAST به طور خلاصه یعنی اگه این لاین درست بود دیگه بقیه لاین ها رو اجرا نکن که اینجا به index.php اشاره میکنه یعنی اگه این فایل بود تو Url بقیه لاین ها رو اجرا نکن

بعدش 2 خط شرط داری که برسی میکنه آدرس فایل -f یا دایرکتوری -d نباشه اگه نبود خط آخر اجرا میشه که همه درخواست ها رو میفرسته به index.php

ali_sed
شنبه 20 بهمن 1397, 15:55 عصر
سلام

بطور کلی این خطوط به این معنی است که آدرس درخواستی کاربر اگر بصورت فیزیکی روی سرور وجود ندارد درخواست را به فایل index.php ارسال کند تا پردازش شود و برای جلوگیری از گیر افتادن برنامه در لوپ اگر کاربر فایل index.php را درخواست کند برنامه نباید دوباره کاری انجام دهد.


#بررسی کن اگر ماژول mod_rewrite نصب شده است کدهای داخل تگ را اجرا کن.
<IfModule mod_rewrite.c>

#موتور ریرایت را فعال کن
RewriteEngine On

#پایه برای آرگومان دوم در دستور RewriteRule را معین می کند. اگر وردپرس را داخل پوشه blog نصب کرده باشید (یعنی اگر آدرس صفحه اصلی سایت شما بصورت domain.com/blog باشد) آنگاه RewriteBase باید به /blog تغییر یابد. یا اینکه آرگومان دوم دستور RewriteRule را بصورت کامل بنویسید در اینجا خط آخر را باید بصورت /blog/index.php تغییر دهید.
RewriteBase /

#در صورتی که url برابر با مقدار index.php است - یعنی هیچ کاری انجام نده و L یعنی بقیه دستورات RewriteRule را نادیده بگیر.
RewriteRule ^index\.php$ - [L]


#سه خط پایانه یک دستور محسوب می شوند در اینجا بررسی می کنیم اگر فایل یا پوشه درخواستی بصورت فیزیکی روی سرور وجود داشته باشد نیازی به ریدایرکت کردن نیست (مانند فایلهای تصاویر و استایل و ...)
#اگر فایل درخواستی وجود نداشت
RewriteCond %{REQUEST_FILENAME} !-f

# و اگر فایل درخواستی یک پوشه فیزیکی روی سرور نبود
RewriteCond %{REQUEST_FILENAME} !-d

# درخواست کاربر را به فایل index.php ارجاع بده و در نهایت L بدین معناست که بقیه دستورات RewriteRule را نادیده بگیر. در این دستور نقطه به معنی هر url ای می باشد.
RewriteRule . /index.php [L]

</IfModule>


در فایل index.php می توانیم url درخواستی کاربر را با استفاده از $_SERVER['REQUEST_URI'] بدست آوریم.