# SEO opened on 15 August 2026 — pre-launch discovery phase, decided by Said.
# The OJS technical noindex further down (env=ojs_noindex) stays: submission, login,
# workflow and api pages must never enter an index.
# ===========================================
# SECURITY & PERFORMANCE
# ===========================================
# Security headers
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Enable CORS for fonts
Header set Access-Control-Allow-Origin "*"
# Compression
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json
# Cache control
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
# ===========================================
# HTTPS & DOMAIN REDIRECTIONS
# ===========================================
RewriteEngine On
# 1. Force HTTPS (remove comment if SSL is active)
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# 2. Remove www prefix
RewriteCond %{HTTP_HOST} ^www\.metaconferences\.org [NC]
RewriteRule ^(.*)$ https://metaconferences.org/$1 [R=301,L]
# 3. Ensure we're at the correct base
RewriteBase /META27/
# --- Anciennes pages OJS (contenu 2026) → pages META 2027 correspondantes ---
# venue garde son ancre ; accommodation a maintenant sa page
RewriteRule ^index\.php/META/(venue|social-events)/?$ /META27/attend.html#venue [R=301,NE,L]
RewriteRule ^index\.php/META/accommodation/?$ /META27/accommodation.html [R=301,L]
RewriteRule ^index\.php/META/(plenaries)/?$ /META27/speakers.html [R=301,L]
RewriteRule ^index\.php/META/symposia/?$ /META27/symposia.html [R=301,L]
RewriteRule ^index\.php/META/(sessions|call-for-sessions)/?$ /META27/special-sessions.html [R=301,L]
RewriteRule ^index\.php/META/dates/?$ /META27/dates.html [R=301,L]
RewriteRule ^index\.php/META/(cfp|call-for-papers|guidelines|review)/?$ /META27/submit.html [R=301,L]
RewriteRule ^index\.php/META/tutorials/?$ /META27/tutorials.html [R=301,L]
RewriteRule ^index\.php/META/(program|workshop)/?$ /META27/programme.html [R=301,L]
RewriteRule ^index\.php/META/(registration|support)/?$ /META27/registration.html [R=301,L]
RewriteRule ^index\.php/META/(sponsors|exhibitors)/?$ /META27/partners.html [R=301,L]
RewriteRule ^index\.php/META/(proceeding|publication)/?$ /META27/proceedings.html [R=301,L]
RewriteRule ^index\.php/META/(paper_awards|awards|bsoa|APQ_award)/?$ /META27/awards.html [R=301,L]
RewriteRule ^index\.php/META/(ethics)/?$ /META27/ethics.html [R=301,L]
RewriteRule ^index\.php/META/(faq)/?$ /META27/faq.html [R=301,L]
RewriteRule ^index\.php/META/(about)/?$ /META27/about.html [R=301,L]
RewriteRule ^index\.php/META/(mailing|photos|contact)/?$ /META27/ [R=301,L]
# --- OJS = MOTEUR INVISIBLE (08/08/2026) ---------------------------
# Les pages "vitrine" d'OJS (héritées du clonage de META26) renvoient
# vers le site premium. Les pages FONCTIONNELLES (login, user/*,
# submission*, submissions, dashboard, api, payment) ne sont PAS touchées.
RewriteRule ^index\.php/META/about/editorialTeam/?$ /META27/committees.html [R=301,L]
RewriteRule ^index\.php/META/about/submissions/?$ /META27/submit.html [R=301,L]
RewriteRule ^index\.php/META/about/contact/?$ /META27/about.html [R=301,L]
RewriteRule ^index\.php/META/issue/(archive|current)/?$ /META27/proceedings.html [R=301,L]
RewriteRule ^index\.php/META/announcements?/?$ /META27/ [R=301,L]
RewriteRule ^index\.php/META/index/?$ /META27/ [R=301,L]
RewriteRule ^index\.php/META/?$ /META27/ [R=301,L]
# -------------------------------------------------------------------
# ===========================================
# SEO: CANONICAL URL REDIRECTIONS
# ===========================================
# 4. Homepage canonical: /META27/ -> /META27/index.php/META
# subdomain meta27.metaconferences.org: docroot IS this directory
RewriteCond %{HTTP_HOST} ^meta27\. [NC]
RewriteRule ^$ /home.html [L]
RewriteRule ^$ home.html [L]
# 5. Fix duplicate homepage patterns
# Pattern 1: /index.php/META/index
RewriteCond %{THE_REQUEST} /index\.php/META/index[\s?]
RewriteRule ^index\.php/META/index$ index.php/META [R=301,L]
# Pattern 2: /META/index (if PATH_INFO is enabled)
RewriteCond %{THE_REQUEST} /META/index[\s?]
RewriteRule ^META/index$ index.php/META [R=301,L]
# Pattern 3: Any URL ending with /index
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/index$
RewriteRule ^(.*)/index$ $1 [R=301,L]
# 6. Remove trailing slash except for directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
# ===========================================
# SEO: NOINDEX FOR ADMIN/BACKEND PAGES
# ===========================================
# Applies to URLs like:
# /META27/index.php/META/submissions
# /META27/index.php/META/workflow
# /META27/index.php/META/management
# /META27/index.php/META/admin
# /META27/index.php/META/user
# More comprehensive pattern matching
SetEnvIfNoCase Request_URI "^/META27/index\.php/META/(submissions|workflow|manageIssues|management|admin|stats|dois|user|api|login|search|dashboard|notifications|tasks)(/|$)" ojs_noindex=1
SetEnvIfNoCase Request_URI "^/META27/index\.php/META/(editor|reviewer|author|copyeditor|proofreader|layout|payment)(/|$)" ojs_noindex=1
# Also match without index.php if clean URLs are enabled
SetEnvIfNoCase Request_URI "^/META27/META/(submissions|workflow|manageIssues|management|admin|stats|dois|user|api|login|search|dashboard|notifications|tasks)(/|$)" ojs_noindex=1
Header set X-Robots-Tag "noindex, nofollow" env=ojs_noindex
# ===========================================
# OJS CLEAN URLS (Optional - if enabled in OJS)
# ===========================================
# Uncomment these lines if you have enabled clean URLs in OJS config
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ index.php/$1 [L,QSA]
# ===========================================
# BLOCK ACCESS TO SENSITIVE FILES
# ===========================================
Order Deny,Allow
Deny from all
# Block access to PHP files in specific directories
Order Deny,Allow
Deny from all
# ===========================================
# ERROR PAGES
# ===========================================
ErrorDocument 404 /META27/index.php/META/error/404
ErrorDocument 403 /META27/index.php/META/error/403
ErrorDocument 500 /META27/index.php/META/error/500
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “alt-php81” package as the default “PHP” programming language.
AddHandler application/x-httpd-alt-php81___lsphp .php .php8 .phtml
# php -- END cPanel-generated handler, do not edit
# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
php_value error_log "/home/directev/logs/php.error.log"
php_flag log_errors On
php_value error_log "/home/directev/logs/php.error.log"
php_flag log_errors On
# END cPanel-generated php ini directives, do not edit
# ===========================================
# PAS DE CACHE SUR LES PAGES DYNAMIQUES (08/08/2026)
# Le .htaccess racine applique ExpiresDefault "access plus 7200 seconds",
# ce qui faisait mettre en cache 2 h les pages OJS (index.php/...).
# Conséquences : contenus obsolètes servis aux visiteurs, et risque de
# réafficher une page périmée après une action (ex. fin de soumission).
ExpiresByType text/html "access plus 0 seconds"
Header always set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header always set Pragma "no-cache"
Header always unset Expires
# ===========================================
# CACHE COURT SUR LE HTML STATIQUE (08/08/2026)
# La racine impose 2 h ; trop long pour un site en cours de mise au point :
# une correction publiée restait invisible pendant deux heures.
# La racine (public_html/.htaccess) pose "max-age=7200, public" via Header set ET un Expires de
# 2 h via mod_expires — le site en recevait DEUX Cache-Control contradictoires, et le navigateur
# du visiteur gardait une page corrigée invisible pendant deux heures. On coupe mod_expires ici
# et on retire l en-tete herite avant de poser le notre, dans les deux tables (onsuccess/always).
ExpiresActive Off
# HTML : revalidation a chaque visite tant que le site est en mise au point.
Header unset Cache-Control
Header always unset Cache-Control
Header unset Expires
Header always unset Expires
Header always set Cache-Control "no-cache, must-revalidate"
# CSS/JS : versionnes par ?v=N dans les pages — le cache peut etre long, une nouvelle
# version change l URL et perce le cache d elle-meme.
Header unset Cache-Control
Header always unset Cache-Control
Header unset Expires
Header always unset Expires
Header always set Cache-Control "public, max-age=604800"
# Images et polices : stables, 30 jours.
Header unset Cache-Control
Header always unset Cache-Control
Header unset Expires
Header always unset Expires
Header always set Cache-Control "public, max-age=2592000"