.htaccess

htaccess. چیست و چه کاربردی

اکثر سایتهایی که با PHP طراحی شده اند برای پیکر بندی خود بر روی آپاچی از فایل .htaccessاستفاده می کنند. این فایل قابلیت های زیادی دارد که در زیر به چند مورد آن اشاره می کنیم:

• تنظیم ریدایرکت
• تنظیم دسترسی فیزیکی به فایلها و پوشه ها
• تنظیم نمایش خطاهای Apache
• تنظیمات URL Rewrite
• مسدود کردن یک یا چند IP خاص یا حتی مسدود کردن یک رنج IP
• تنظیم پسورد بر روی پوشه ای خاص
• کنترل کش و Expire Date آن
• کنترل برخی تغییرات در تنظیمات پیش فرض PHP، MySQL و Apache
• جلوگیری از نمایش تمامی فایلها یا یک یا چند فایل با پسوندی خاص
• اضافه نمودن یک MIME
• معرفی یک Default Document در پوشه ای خاص
• کنترل Default Charset
محتوای که در فایل .htaccess قرار داده می شود بر روی پوشه ای که آن فایل در آنجا واقع شده و زیر پوشه های آن اعمال می گردد و با قرار دادن یک فایل .
چنانچه تنظیماتی خاص برای زیر پوشه ای دارید، باید یک فایلhtaccess مجزا در آن پوشه ایجاد کنید.

Web.Config چیست و چه کاربردی دارد؟

مایکروسافت فایل مشابهی به نام web.config را برای سایت هایIIS فراهم نموده است.
تقریبا کدهای مورد استفاده در htaccess با web.config یکسان بوده و می توانیداز همین کد ها برای این فایل نیز استفاده نمایید.
Microsoft در IIS خود امکانی برای ترجمه مستقیم کد های .htaccess به ساختار XML قابل قبول در Web.config تهیه نموده تا پشتیبانی از سایتهای ایجاد شده توسط PHP را کامل کند. برای آشنایی بیشتر با این امکان می توانید از راهنمای زیر استفاده کنید:

http://support.iranhost.com/kb/a154/rule-iis-import.aspx

از آنجا که فایل web.config از ساختار XML استفاده می کند، بسیار از .htaccess ساختار مند تر است. در اینجا تلاش می کنیم که کدهای مورد استفاده در هر دو فایل را ذکر کنیم.
در زیر به برخی از امکانات فایل .htaccess و معادل آن در فایل web.config خواهیم پرداخت

محدود کردن درخواست های مرورگر:

از طریق این تنظیم می تواند درخواست های مرورگر برای دسترسی به پوشه ها یا پسوند های خاصی از فایل را فیلتر نمود.
برای تنظیم این محدودیت در فایل .htaccess از دستور FilesMatch و در فایل web.config از دستورrequestFiltering کمک می گیریم.

نمونه کد htaccess:

<FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">
Order allow,deny

نمونه کد web.config:

<security>

<requestFiltering>

<denyUrlSequences>

<add sequence=”engine” />

<add sequence=”inc” />

<add sequence=”info” />

<add sequence=”install” />

<add sequence=”module” />

<add sequence=”profile” />

<add sequence=”po” />

<add sequence=”sh” />

<add sequence=”theme” />

<add sequence=”tpl(\.php” />

<add sequence=”Root” />

<add sequence=”Tag” />

<add sequence=”Template” />

<add sequence=”Repository” />

<add sequence=”code-style” />

</denyUrlSequences>

<fileExtensions>

<add fileExtension=”.sql” allowed=”false” />

<add fileExtension=”.pl” allowed=”false” />

</fileExtensions>

</requestFiltering>

</security>

باید توجه داشت که در هنگام نصب یک CMS نباید از این دستور استفاده نمود.
همچنین می توانید از امکان URL Rewrite هم برای انجام این تنظیم استفاده کنید. استفاده از URL Rewrite به مراتب بهتر است زیرا می تونید چنانچه درخواست دسترسی به فایل یا پوشه مورد نظر از سمت مرور گر کاربر رسید، این درخواست را به صفحه خطای مناسبی هدایت کنید.

نمونه کد Web.config با استفاده از URL Rewrite:

<pre>

  <rule name=”Protect files and directories from prying eyes” stopProcessing=”true”>

                <match url=”\.(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$” />

                <action type=”CustomResponse” statusCode=”403″ subStatusCode=”0″

                    statusReason=”Forbidden”

                    statusDescription=”Access is forbidden.” />

        </rule>

</pre>

   

در این مثال خطای 403 به کاربر نمایش داده می شود.

دستور Default Document یا DirectoryIndex

از لحاظ معنایی Default Document یعنی سند پیش فرض،از طریق این دستور می توانید نام فایلی که در لحظه دسترسی مرورگر به پوشه خاص باید نمایش داده شود را مشخص کنید. مثلا فرض کنید به طور پیش فرض فایل index.php به عنوان Default Document معرفی شده اما شما می خواهید در پوشه admin فایل login.php را به عنوان Default Document معرفی کنید در این صورت می توانید از کد های زیر استفاده نمایید:

نمونه کد .htaccess:

# Set the default handler.
DirectoryIndex index.php

نمونه کد Web.config:

<pre>

<defaultDocument>

<files>

<remove value=”index.php” />

<add value=”index.php” />

</files>

</defaultDocument>

</pre>

اصلی ترین کاربرد URL Rewrite برای تبدیل آدرسهای طولانی به آدرسهایی است که کوتاه هستند. بر روی IIS هم می توانید افزونه URL Rewrite را نصب کنید. در Apache این امکان با نام mod_مشهور شده ودر IIS به آن URL Rewrite گفته می شود. IIS توانایی خواندن و ترجمه کد های mod_rewrite به URL rewrite را دارد.

نمونه کد .htaccess:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

نمونه کد Web.config:

<pre>

<rewrite>

  <rules>

    <rule name=”Imported Rule 1″ stopProcessing=”true”>

      <match url=”^(.*)$” ignoreCase=”false” />

      <conditions>

        <add input=”{HTTP_HOST}” pattern=”^example\.com$” />

      </conditions>

      <action type=”Redirect” redirectType=”Permanent” url=”http://www.example.com/{R:1}” />

    </rule>

    <rule name=”Imported Rule 2″ stopProcessing=”true”>

      <match url=”^(.*)$” ignoreCase=”false” />

      <conditions>

        <add input=”{REQUEST_FILENAME}” matchType=”IsFile” ignoreCase=”false” negate=”true” />

        <add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” ignoreCase=”false” negate=”true” />

        <add input=”{URL}” pattern=”^/favicon.ico$” ignoreCase=”false” negate=”true” />

      </conditions>

      <action type=”Rewrite” url=”index.php?q={R:1}” appendQueryString=”true” />

    </rule>

  </rules>

</rewrite>

</pre>

مدیریت صفحه های خطا:

مرسوم است که سایت ها خطاهای رایج در وب سرور را برنامه ریزی می کنند و به جای نمایش صفحه خطا که برای کاربر مفهموم نیست صفحه کاربر پسند تری را نشان می دهند. به عنوان مثال به جای نمایش خطای 404 که به این معناست که فایل مورد نظر وجود ندارد، می توان صفحه ای بهتر طراحی نمود و وب سرور را به صورتی تنظیم نمود که در هنگام ایجاد این خطا صفحه طراحی شده ما را نمایش دهد:

نمونه کد .htaccess:

# Make Application handle any 404 errors.
ErrorDocument 404 /index.php

نمونه کد Web.config:

<pre>

<!– HTTP Errors section should only be enabled if the “Error Pages”

feature has been delegated as “Read/Write” at the Web Server level.

<httpErrors>

<remove statusCode=”404″ subStatusCode=”-1″ />

<error statusCode=”404″ prefixLanguageFilePath=”” path=”/index.php” responseMode=”ExecuteURL” />

</httpErrors>

–>

</pre>

این تنظیم به این دلیل کامنت شده که IIS برای مدیریت صفحه های خطا از دستور httpErrors استفاده می نماید اما این امکان در Application Level بصورت پیش فرض غیر فعال می باشد. ابتدا می بایست این امکان فعال شود و بعد از آن این کد از حالت کامنت خارج شود.

تنظیم مدت زمان نگهداری Cache:

این تنظیمات بسیار برای Seo سایت مهم هستند.این دستورات برای اطمینان از Cache شدن محتوای ثابت استفاده می شود و محتوای Dynamic به طور کلی Cacheنمی شود. از طریق دستورات ضمن فعال سازی Cache در واقع می توان زمان نگهداری از این محتوای Cache شده را تنظیم کرد.
در فایل .htaccess این تنظیمات توسط افزونه mod_expires کنترل می شود و در فایل IIS توسط افزونه Output Caching.

نمونه کد .htaccess:

# Requires mod_expires to be enabled.

# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

# Do not cache dynamically generated pages.
ExpiresByType text/html A1

نمونه کد Web.config:

<pre>

<caching>

            <profiles>

                <add extension=”.php” policy=”DisableCache” kernelCachePolicy=”DisableCache” />

                <add extension=”.html” policy=”CacheForTimePeriod” kernelCachePolicy=”CacheForTimePeriod” duration=”14:00:00:00″ />

            </profiles>

        </caching>

</pre>

    دیدگاه خود را بیان کنید

    ایمیل شما محفوظ خواهد ماند.*