مولّد .htaccess لخادم Apache

ولّد قواعد .htaccess لـ Apache: فرض HTTPS وإضافة أو إزالة www وتحويلات 301 وصفحات الأخطاء وgzip والتخزين المؤقت وترويسات الأمان وحجب الملفات المخفية.

يمكن أن يكون الرمز 301 أو 302 أو 303 أو 307 أو 308 أو 410 (محذوف). ويمكن أن يكون المسار الجديد عنوانًا كاملًا.

.htaccess
<IfModule mod_rewrite.c>
  RewriteEngine On
  # Redirect HTTP to HTTPS
  RewriteCond %{HTTPS} off
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

# Redirects (mod_alias)
Redirect 301 /old-page /new-page
Redirect 301 /blog/2019 /blog

# Custom error pages
ErrorDocument 404 /404.html

# Disable directory listings
Options -Indexes

# Block access to hidden files such as .env and .git
<FilesMatch "^\.">
  Require all denied
</FilesMatch>
RedirectMatch 404 /\.git

# Security headers
<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

# Compress text responses
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
  AddOutputFilterByType DEFLATE application/javascript application/json application/xml application/rss+xml
  AddOutputFilterByType DEFLATE image/svg+xml font/ttf font/otf
</IfModule>

# Browser caching
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 month"
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType text/javascript "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/avif "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
مخصص لخادم Apache 2.4 مع mod_rewrite وmod_alias وmod_headers وmod_deflate وmod_expires (تُغلَّف الكتل بـ IfModule قدر الإمكان). اختبره أولًا على خادم تجريبي، فخطأ صياغي واحد في .htaccess يسبب HTTP 500 للمجلد كله. لا يقرأ Nginx ملف .htaccess.

ما هو مولّد .htaccess؟

تولّد هذه الأداة ملف .htaccess جاهزاً للاستخدام لـ Apache 2.4. حدّد الميزات التي تحتاجها – إعادة التوجيه إلى HTTPS ومضيف قانوني بـ www أو بدونها وHSTS وإيقاف سرد المجلدات وحماية الملفات المخفية وضغط gzip والتخزين المؤقت في المتصفح وترويسات أمان أساسية – وأضف تحويلات 301/302/410 وصفحات أخطاء مخصصة.

كيفية استخدام مولّد .htaccess

  1. حدّد الخيارات التي تحتاجها واختر كيفية التعامل مع www.
  2. أدخل التحويلات بصيغة /old-path /new-path متبوعة اختيارياً بحالة (301 أو 302 أو 303 أو 307 أو 308 أو 410).
  3. أدخل مسارات صفحات 404 و500 المخصصة.
  4. انسخ النتيجة أو نزّلها كـ .htaccess واختبرها على خادم تجريبي أولاً.

مثال

الإدخال
Force HTTPS, remove www, redirect /old-page → /new-page
الإخراج
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
Redirect 301 /old-page /new-page

متى تستخدم مولّد .htaccess

استخدمه على الاستضافة المشتركة أو خوادم Apache التي لا تستطيع فيها تعديل إعدادات الخادم الرئيسية. وعلى Nginx أو إعدادات LiteSpeed الخاصة أو Cloudflare أو CDN استخدم إعداداتها بدلاً من ذلك – إذ يتجاهل Nginx ملف .htaccess تماماً. يسبب خطأ الصياغة HTTP 500 للمجلد كله، لذا اختبر دائماً.

كيف يعمل مولّد .htaccess

تستخدم قواعد HTTPS وwww الوحدة mod_rewrite (RewriteCond %{HTTPS} off وشروط المضيف) داخل <IfModule mod_rewrite.c>؛ وتستخدم إعادة توجيه www العنوان https مباشرة عند فرض HTTPS، لتجنب سلسلة من قفزتين. تستخدم تحويلات المسارات أسطر Redirect من mod_alias (وRedirect gone لـ 410). يستخدم الضغط mod_deflate والتخزين المؤقت mod_expires بمدد طويلة للأصول الثابتة وبدونها لـ HTML، والترويسات mod_headers مع Header always set. تُمنع الملفات المخفية بـ <FilesMatch "^\."> وRedirectMatch 404 /\.git.

حالات الاستخدام الشائعة

  • فرض HTTPS ومضيف واحد بدون www بعد تثبيت شهادة.
  • تحويل الروابط القديمة بعد إعادة تصميم موقع.
  • تفعيل الضغط والتخزين المؤقت لتسريع موقع WordPress على استضافة مشتركة.
  • حجب الوصول إلى ملفات .env و.git.

الأسئلة الشائعة

لماذا يظهر خطأ 500 بعد رفع .htaccess؟

عادة لأن وحدة مطلوبة غير مفعلة أو توجيهاً غير مسموح به بحسب AllowOverride. راجع سجل أخطاء Apache.

هل أفعّل HSTS؟

فقط بعد أن يعمل الموقع كله وكل نطاقاته الفرعية عبر HTTPS – فسترفض المتصفحات HTTP العادي طوال مدة max-age.

هل يعمل .htaccess على Nginx؟

لا. لا يقرأ Nginx ملف .htaccess؛ يجب ترجمة القواعد إلى كتلة الخادم.

استكشف المزيد من الفئات