فایل htaccess وردپرس چیست و با آن چه کار میتوان کرد
فایل htaccess وردپرس چیست؟ اگر این سوال را میپرسید پس در مسیر درست برای تبدیل شدن به یک توسعه دهنده عالی وردپرس هستید، چرا که دانستن اینکه هر فایل در وردپرس چه کاری را انجام میدهد، مهم است. اگر وارد جزئیات شوید و درک کنید که هر فایل در وردپرس چه کاری انجام میدهد، هضم کردن همه چیز راحت میشود. در این مقاله بر روی فایل htaccess وردپرس تمرکز کردهایم و به شما آموزش میدهیم چگونه سرعت سایت خود را بهینه سازی کنید، امنیت آن را بهبود ببخشید و راه های مفید دیگر برای استفاده از فایل htaccess را بررسی خواهیم کرد.
فایل htaccess چیست؟
فایل htaccess یکی از فایلهای اصلی است که میتوان از آن برای بهینه سازی سرعت وبسایت، بهبود امنیت و ایجاد ریدایرکت استفاده کرد.
هدف اصلی htaccess تعیین دستورهایی برای آپاچی (Apache) درمورد نحوه اجرای وبسایت وردپرس میباشد. فایل htaccess پیشقرض وردپرس نحوه نمایش لینکهای یکتا بر روی سایت وردپرس را کنترل میکند، البته کارهای بسیار بیشتری با فایل htaccess در وردپرس میتوان انجام داد.
قبل از شروع
ویرایش فایلهای وردپرس بدون گرفتن پشتیبان اصلا فکر خوبی نیست. برای همین پیشنهاد میکنیم به یکی از روشهای زیر قبل از ویرایش فایل htaccess از آن بکاپ بگیرید:
- تهیه بکاپ از وردپرس – باید یک قانون برای بک آپ داشته باشید، یکی از مهمترین گامهای احتیاطی است که باید با پشتیبان گرفتن از کل وبسایت وردپرس بردارید.
- یک کپی از وبسایت وردپرس در لوکال تهیه کنید – شما میتوانید یک وردپرس داخلی را بر روی Mac یا PCخود نصب کنید و یک کپی از وبسایت خود بگیرید تا ویرایش ها را انجام دهید. اگر همه چیز درست پیش رود، شما میتوانید فایل .htaccess را در سایت اصلی کپی کنید. (هرچند این کار برای قوانین ریدایرکت URL عمل نمیکند.)
- یک وبسایت توسعه/صحنه ای بسازید – یک ویژگی بسیار معمول بین هاست های مدیریت شده وردپرس ساختن سایت صحنه ای Staging و یا Dev است. سایت های صحنه ای یک URL موقت و یک کپی از وبسایت حقیقی شما است. شما میتوانید تغییرات را بر روی سایت توسعه دهنده انجام دهید و سپس آن را به سایت اصلی پس از اتمام کار منتقل کنید. Cloudways ،Pantheon ، و Siteground سرویس های هاستی هستند که برای ارائه این ویژگی شناخته شده اند.
- از فایل htaccess فعلی یک کپی بگیرید؛ شما میتوانید از فایل htaccess خود قبل از ویرایش یک بکاپ تهیه کنید. اگر بعد از ویرایش htaccess چیزی خراب شد شما میتوانید به سادگی آن را با فایل پشتیبانی خود جایگزین کنید.
نحوه دسترسی به فایل htaccess وردپرس
دو مورد از اولین سوال هایی که یک مبتدی وردپرس میپرسد:”فایل htaccess در وردپرس کجا قرار دارد؟” و “چگونه به فایل .htaccess دسترسی پبدا کنیم؟” است
. خب، شما میتوانید فایل htaccess را در مسیر public_html وردپرس بیابید و برای دسترسی به آن میتوانید از یک نرمافزار مدیریت FTP مانند FileZilla استفاده کنید.
اگر نمیتوانید فایل .htaccess را در مسیر root وردپرس بیابید، پس شاید وبسایت وردپرس شما فایل htaccess پیشفرض ندارد و یا اینکه اکانت FTP شما فایل های پنهان را نشان نمیدهد. فایل htaccess به صورت پیشفرض پنهان است برای همین با یک “.” شروع میشود.(عملا یه فایل با پسوند است)
برای فعال کردن نمایش فایل های پنهان در FileZilla به صورت زیر عمل کنید:
• FileZilla را باز کرده و به مرورگر وب خود وصل شوید.
• به مسیر root جایی که وردپرس نصب شده است بروید.
• از نوار منوی بالای صفحه Server را انتخاب کنید.
• “Force Showing Hidden Files” را انتخاب کنید.
اگر هنوز هم فایل htaccess را پس از نمایش دادن فایل های پنهان نمیبینید، به این معنی است که وردپرس شما فایل htaccess. ندارد. البته نگران نشوید زیرا وردپرس شما از پیوندهای یکتای پیشفرض استفاده میکند
برای فعال کردن htaccess، به پیشخوان وردپرس وارده شده، به قسمت Settings > Permalinks و بر روی ذخیره تغییرات کلیک کنید.
بعد از انجام این کار، اکانت FTP خود را رفرش کنید و تا فایل htaccess را با کد پیشفرض مشاهده نمائید.
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
با فایل htaccess در وردپرس چه کار میتوان کرد
اکنون که میدانید چگونع فایل htaccess را به دست بیاورید، وقت این است که به دستورهای مشخصی که میتوان درون فایل htaccess قرار داد بپردازیم. قوانین را میتوان به سه دسته تقسیم میکنم:
- دستورهای ریدایرکت
- بهبود سرعت وردپرس
- ارتقای امنیت وردپرس
راه انداری ریدایرکت ها
در ابتدا، بیایید معمول ترین دستورهای ریدایرکتی را که میتوان روی وبسایت وردپرس پیاده کرد بررسی کنیم:
- ریدایرکت (دائمی) 301
دستورهای ریدایرکت 301 به مرورگر بازدیدکننده و بات های موتور جستجو میگوید که یک URL به صورت دائم به یک URL دیگر انتقال یافته است. این یک دستور معمول ریدایرکت است که سئو برای رده بندی صفحات در SERP ها استفاده میکند.
Redirect 301 /oldpage.html http://www.yourwebsite.com/newpage.html
- ریدایرکت (موقتی) 302
اگر بر روی URL اصلی کار میکنید و میخواهید موقتا برای مدتی بازدیدکنندگان را به یک صفحه دیگر ریدایرکت کنید، پس شاید نیاز داشته باشید از ریدایرکت 302 استفاده کنید.
Redirect 302 /oldpage.html http://www.yourwebsite.com/newpage.html
- اجبار به ریدایرکت با WWW
اگر میخواهید URL شما همیشه با www شروع شود از کد زیر که تمام URLهای کل سایت را یکپارچه میکند استفاده کنید:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
- اجبار به ریدایرکت بدون WWW
اگر URLهای کوتاهتری بدون www را ترجیح میدهید، کد زیر مناسب شما است:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
- ریدایرکت اجباری به HTTPS
اگر از گواهینامه SSL بر روی وبسایت وردپرس خود استفاده میکنید، احتمالا میخواهید تمام بازدیدکنندگان و موتورهای جستجو به نسخه HTTPs وبسایت شما ریدایرکت شوند. از این کد استفاده کنید:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
- ریدایرکت اجباری به HTTP
برای اجبار کردن اتصال های غیر HTTPs از کد زیر استفاده کنید:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
- ریدایرکت کردن یک دامنه اولیه به دامنه دیگر
اگر دو یا تعداد بیشتری اسم دامنه دارید و میخواهید تمامی آنها به یک دامنه ریدایرکت شوند،میتوانید دستورهای ریدایرکت را در دامنه هایی که میخواهید به دامنه نخستین شما ریدایرکت شوند اضافه کنید:
Redirect 301 / http://www.abc.com/
مثلا دستور بالا را به abc.net و abc.org اضافه کنید تا آن ها را به abc.com ریدایرکت کند.
- حذف کردن Query _String
URLوبسایت زمانی که به آن اجازه میدهید یک query string در انتها اضافه کند به همان صورت نمایش داده خواهد شد. به عنوان مثالmyblog.com میتواند به صورت myblog.com/?my=query نیز در دسترس باشد. اگر این وصله های query توسط موتور جستجو بررسی شوند مطلب به صورت تکراری شناسایی میشود؛ روش ساده راحت شدن از این مشکل ریدایرکت کردن و حذف وصله های query با استفاده از این کد است:
RewriteCond %{THE_REQUEST} ^[A-Z]+ /.*\ HTTP
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* https://www.mywebsite.com%{REQUEST_URI}? [R=301,L]
- قرار دادن زبان های متغیر بسته به مشتری
برای وبسایت های وردپرس چند زبانه، بهترین روش ریدایرکت کردن بازدید کنندگان به زبان ترجیح داده شده خود با استفاده از شناسایی زبان مرورگرشان و ریدایرکت کردن آن ها به صفحه مورد نطر با استفاده کد زیر است:
RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]
RewriteRule ^(.*)$ - [env=prefer-language:%1]
نکته: بسیاری از پلاگینهای چند زبانه وردپرس خودشان این کار را انجام میدهند.
- ریدایرکت کردن بازخورد های وردپرس به Feedburner
وردپرس بازخوردهای RSS برای نوشتهها را به صورت پیشفرض میسازد، اما اگر شما میخواهید از یک فعال کننده بازخوردهای واسطه مانندFeedburner استفاده کنید، از کد زیر استفاده کنید:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/feed\.gif$
RewriteRule .* - [L]
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
بهینه سازی سرعت وردپرس با استفاده از دستور های htaccess
بسیاری از دستور های ذخیره سازی و انقضای وردپرس میتواند درون فایلهای htaccess تنظیم شوند. این به این معنی است که شما میتوانید دستور هایی را برای افزایش سرعت وبسایت وردپرس خود اضافه کنید.
- Expires Headers برای cache مرورگر تنظیم کنید
بسیاری از مرورگر های امروزی مواردی مانند CSS، JS، HTML و چندین فایلهای رسانه ای را مانند favicon از وبسایتهایی که به تازگی از آنها بازدید شده است را به صورت پنهان در حاقظه خود ذخیره میکنند. اگر این موارد به طور معمول در سایت شما تغییر نمیکنند، پس شما باید زمان انقضای آنها را با استفاده از دستورهای زیر تغییر دهید:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!)
ExpiresByType image/x-icon "access plus 1 week"
# HTML components (HTCs)
ExpiresByType text/x-component "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web feeds
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Web fonts
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
- فعال کردن فشرده سازی GZIP
GZIP یک روش فشرده سازی است که به محبوبیت رسیده و تبدیل به روش استاندارد فشرده سازی برای پلاگین های حافظه داخلی وردپرس شده است. این روش فایل ها را فشرده کرده و فایل های موقتی تولید میکند تا به جای اصلی استفاده شود.
اگر میخواهید به صورت دستی فشره سازی GZIP را در یک وبسایت وردپرس فعال کنید دستور زیر را به فایل htaccess خود اضافه کنید:
<IfModule mod_deflate.c>
# Compress HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>
- افزایش حداکثر حجم فایل آپلود شده با استفاده از فایل htaccess وردپرس
این دستور به شما کمک میکند فایل های بزرگتر را در وبسایت وردپرس خود آپلود کنید. به صورت پیشفرض سایز فایل آپلود شده در وردپرس بین 10 مگابایت تا 25 مگابایت است، اما اگر میخواهید این حجم را افزایش دهید، از کد زیر استفاده کنید:
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300
بهبود امنیت وبسایت وردپرس
وقتی پای امنیت درمیان باشد، دستوراتی در htaccess وجود دارد که میتوانید برای محدودتر کردن دسترسی کاربران به فایل و URLها، قفل کردن دسترسی به فایل ها و موارد زیاد دیگری اضافه کنید.
- از .htaccess حفاظت کنید
یک مهاجم میتواند به سادگی تمام وبسایت شما را با تزریق یک دستور مخرب به فایل htaccess داون کند. برای همین حفاظت از آن مهم است. و دستور زیر تمام دسترسی ها به فایل htaccess را رد میکند:
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
- محدود کردن دسترسی به پیشخوان وردپرس
وبسایت های وردپرس در خطر حملاتی مانند، حملات brute force که تلاش میکند وارد قسمت پیشخوان وردپرس شوند هستند. اگر میخواهید کاملا دسترسی به داشبورد خود را محدود کنید، یک فایل htaccess جدید بسازید و در پوشه /wp-admin قرار داده و کد زیر را اضافه کنید:
# Limit logins and admin by IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from xx.xx.xx.xx
</Limit>
نکته: xx.xx.xx.xx آدرس IP است که میخواهید آن را در لیست سفید قرار دهید. تنها این آدرس IPمیتواند به وبسایت شما وارد شود.
- حفاظت از فایل های رمز عبور
شما میتوانید فایل ها را با کمک دستور htaccecc زیر حفاظت کنید:
<Files login.php>
AuthName "Prompt"
AuthType Basic
AuthUserFile /web/mywebsite.com/.htpasswd
Require valid-user
</Files>
- فایل های مهم را حفاظت کنید
فایل های ضروری دیگری نیز مانند php.ini، wp-config.php هستند که باید از آنها حفاظت کنید، و برای اینکار دستور زیر را برای محدود کردن دسترسی اضافه کنید:
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>
- حفاظت از /wp-content/
پوشه /wp-content شامل فایلهای قالب، تصاویر و فایل های Cache شده است. مهاجمین سعی خواهند کرد به این فایل های درون پوشه دسترسی پیدا کرده و کدهای مخرب تزریق کنند. از این کد برای دور نگه داشتن آنها استفاده کنید:
Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
Allow from all
</Files>
- آدرس IP را مسدود کنید
اگر آدرس IP مهاجمین را میدانید(میتوانید IP را از ورودی های سایتتان به دست بیاورید) میتوانید آن را با کمک دستور htaccess زیر مسدود کنید:
<Limit GET POST>
order allow,deny
deny from 123.456.78.9
allow from all
</Limit>
- رد دسترسی به فایل های مشخص
درست مانند یک آدرس IP مشخص، شما میتوانید دسترسی فایل های مشخصی را با کمک کد زیر مسدود کنید:
<files your-file-name.txt>
order allow,deny
deny from all
</files>
- ممانعت فایل ها از hotlink شدن فایل/تصاویر و دزدی پهنای باند
تصاویر و فایل ها میتوانند دزدیده شوند و درخواست های زیادی برای تصاویر و URLهای فایل ها صورت گیرد. این نوع از حملات پهنای باند شما را افزایش داده و آهسته آهسته سرعت وبسایت شما را کم میکنند. برای جلوگیری از هاتلینک، از دستور زیر استفاده کنید:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mywebsite\.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]
نتیجه گیری
بدون شک فایل htaccess وردپرس یکی از مهمترین فایل های وردپرس است. با استفاده صحیح از آن سطح امنیت وبسایت شما افزایش یافته و بهینه سازی سرعت سایت بهبود پیدا میکند؛ به جز امنیت و سرعت، فایل های htaccess دستورهای قدرتمندی برای تغییر رفتار پیشفرض وبسایت شما دارد. برای همین به هر توسعه دهنده وردپرس توصیه میشود درک عمیق تری نسبت به هر دستوری که درون این فایل میتوان استفاده کرد داشته باشند.