## Manejo de errores de Apache. Cuando se produzca uno de estos errores, redirigimos a una pagina especial desarrollada por nosotros.
ErrorDocument 401 /error401.html
ErrorDocument 403 /error403.html
ErrorDocument 404 /error404.html

RewriteEngine On

Options +FollowSymLinks

# Proteccion basica contra XSS y Clickjacking
<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
    Header set X-Frame-Options "SAMEORIGIN"
    Header set X-XSS-Protection "1; mode=block"
</IfModule>

# EXCEPCIÓN CRON JOB — permite que cron.php sea llamado por curl/wget
RewriteCond %{REQUEST_URI} ^/cron\.php$ [NC]
RewriteRule ^ - [L]

# Evitar escaneos y cualquier intento de manipulación malintencionada
# (NOTA: no se bloquea curl/wget/python aquí porque la API REST del sitio
# se usa precisamente con esas herramientas — solo se filtran patrones
# realmente maliciosos: payloads XSS, escáneres conocidos, user-agent vacío)
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(-|\.|') [OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|%3C|%3E) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|libwwwperl|snoopy|winhttp|nikto|clshttp|archiver|loader|miner|suck|reaper|leach) [NC,OR]
RewriteCond %{REQUEST_URI} (/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]
RewriteCond %{HTTP_REFERER} (%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60) [NC,OR]
RewriteCond %{QUERY_STRING} (%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|%3C|%3E|%27|%26%23|%60) [NC,OR]
RewriteCond %{HTTP_COOKIE} (<|>|'|%3C|%3E|%27) [NC]
RewriteRule .* - [F,L]

## Evitar que se liste el contenido de los directorios
Options All -Indexes
IndexIgnore *

# Protegerse contra los ataques DOS limitando el tamaño de subida de archivos
LimitRequestBody 10240000

#-#-#-#- PHPost .htaccess -#-#-#-#
# LOGOUT
RewriteCond %{QUERY_STRING} ^action=login-salir$
RewriteRule ^$ index.php?action=login-salir [L]
# INDEX
RewriteRule ^$ index.php?do=home [QSA,L]
RewriteRule ^pagina([0-9]+)$ index.php?page=$1 [QSA,L]
RewriteRule ^index.php$ index.php?do=home [QSA,L]
RewriteRule ^cuenta.php$ inc/php/cuenta.php [QSA,L]
RewriteRule ^agregar.php$ inc/php/agregar.php [QSA,L]
#PERFIL
RewriteRule ^perfil/([A-Za-z0-9_-]+)$ inc/php/perfil.php?user=$1 [QSA,L]
RewriteRule ^perfil/([A-Za-z0-9_-]+)/$ inc/php/perfil.php?user=$1 [QSA,L]
RewriteRule ^perfil/([A-Za-z0-9_-]+)/([0-9]+)$ inc/php/perfil.php?user=$1&pid=$2 [QSA,L]
# POSTS
RewriteRule ^posts/$ index.php?do=posts [QSA,L]
RewriteRule ^mi/$ index.php?do=portal [QSA,L]
RewriteRule ^posts/([a-z]+)$ index.php?do=posts&action=$1 [QSA,L]
RewriteRule ^posts/pagina([0-9]+)$ index.php?do=posts&page=$1 [QSA,L]
RewriteRule ^posts/([A-Za-z0-9_-]+)/$ index.php?do=posts&cat=$1 [QSA,L]
RewriteRule ^posts/([A-Za-z0-9_-]+)/pagina([0-9]+)$ index.php?do=posts&cat=$1&page=$2 [QSA,L]
RewriteRule ^posts/([A-Za-z0-9_-]+)/([0-9]+)/(.*).html$ index.php?do=posts&cat=$1&post_id=$2&title=$3 [QSA,L]
RewriteRule ^posts/editar/([0-9]+)$ inc/php/agregar.php?action=editar&pid=$1 [QSA,L]
# RECUPERAR PASS Y VALIDAR CUENTA
RewriteRule ^password/(.+)/([0-9]+)/(.+)/?$ inc/php/password.php?hash=$1&type=$2&email=$3
RewriteRule ^validar/(.+)/([0-9]+)/(.+)/?$ inc/php/password.php?hash=$1&type=$2&email=$3
# NOVATOS
RewriteRule ^novatos/$ inc/php/novatos.php?action= [QSA,L]
RewriteRule ^novatos/tops/$ inc/php/novatos.php?action=tops [QSA,L]
# FOTOS
RewriteRule ^fotos/([A-Za-z0-9_-]+).php$ inc/php/fotos.php?action=$1 [QSA,L]
RewriteRule ^fotos/([A-Za-z0-9_-]+)$ inc/php/fotos.php?action=album&user=$1 [QSA,L]
RewriteRule ^fotos/([A-Za-z0-9_-]+)/([0-9]+)$ inc/php/fotos.php?action=album&user=$1&page=$2 [QSA,L]
RewriteRule ^fotos/([A-Za-z0-9_-]+)/([0-9]+)/([A-Za-z0-9_-]+).html$ inc/php/fotos.php?action=ver&user=$1&fid=$2 [QSA,L]
# ADMIN
RewriteRule ^admin/afs/editar/([0-9]+)$ inc/php/admin.php?action=afs&act=editar&aid=$1 [QSA,L]
RewriteRule ^admin/medals/editar/([0-9]+)$ inc/php/admin.php?action=medals&act=editar&mid=$1 [QSA,L]
RewriteRule ^admin/medals/nueva inc/php/admin.php?action=medals&act=nueva [QSA,L]
RewriteRule ^admin/news/editar/([0-9]+)$ inc/php/admin.php?action=news&act=editar&nid=$1 [QSA,L]
RewriteRule ^admin/news/nueva inc/php/admin.php?action=news&act=nuevo [QSA,L]
# FEED
RewriteRule ^admin/feed$ inc/php/admin.php?action=feed [QSA,L]
# MODERACIÓN
RewriteRule ^moderacion/buscador/([0-2]+)/([0-2]+)/([^/]+)$ inc/php/moderacion.php?action=buscador&act=search&m=$1&t=$2&texto=$3 [QSA,L]

#HISTORIAL DE MODERACIÓN
RewriteRule ^mod-history/([A-Za-z0-9_-]+)/ inc/php/mod-history.php?ver=$1 [QSA,L]

#RSS
RewriteRule ^rss/([A-Za-z0-9_-]+)$ inc/php/rss.php?action=$1 [QSA,L]

#SITEMAP
RewriteRule ^sitemap\.xml$ inc/php/sitemap.php [L]
# LOGIN Y REGISTRO
RewriteRule ^login/?$ index.php?do=login [QSA,L]
RewriteRule ^registro/?$ index.php?do=registro [QSA,L]
# STREAMING
RewriteRule ^streaming/?$ index.php?do=streaming [QSA,L]
# RADIO
RewriteRule ^radio/?$ index.php?do=radio [QSA,L]
# CALENDARIO
RewriteRule ^calendario/?$ index.php?do=calendario [QSA,L]
RewriteRule ^admin/calendario/?$ inc/php/admin.php?action=calendario [QSA,L]
RewriteRule ^chat/?$ index.php?do=chat [QSA,L]
RewriteRule ^admin/invitaciones/?$ inc/php/admin.php?action=invitaciones [QSA,L]
RewriteRule ^admin/plugins/?$ inc/php/admin.php?action=plugins [QSA,L]
# MISIONES
RewriteRule ^misiones/?$ index.php?do=misiones [QSA,L]
RewriteRule ^admin/misiones/?$ inc/php/admin.php?action=misiones [QSA,L]
# PREMIOS
RewriteRule ^premios/?$ index.php?do=premios [QSA,L]
RewriteRule ^admin/premios/?$ inc/php/admin.php?action=premios [QSA,L]
# RETOS
RewriteRule ^retos/?$ index.php?do=retos [QSA,L]
RewriteRule ^admin/referidos/?$ inc/php/admin.php?action=referidos [QSA,L]
RewriteRule ^admin/preguntas/?$ inc/php/admin.php?action=preguntas [QSA,L]
RewriteRule ^pages/preguntasfrecuentes/?$ inc/php/pages.php?action=preguntasfrecuentes [QSA,L]
#EXTRAS
RewriteCond %{REQUEST_URI} !^/login-salir\.php$
RewriteCond %{REQUEST_URI} !^/google_auth\.php$
# AJAX PREMIOS
RewriteRule ^ajax/premios/?$ inc/php/ajax.premios.php [QSA,L]
RewriteRule ^ajax/link-preview/?$ inc/php/ajax.link-preview.php [QSA,L]
# AJAX BUSCADOR
RewriteRule ^ajax/buscar-autocomplete/?$ inc/php/ajax_files.php?action=buscar-autocomplete [QSA,L]
RewriteRule ^ajax/buscar-menciones/?$ inc/php/ajax_files.php?action=buscar-menciones [QSA,L]
RewriteRule ^([A-Za-z0-9_-]+)\.php$ inc/php/ajax_files.php?action=$1 [QSA,L]
RewriteRule ^([A-Za-z0-9_-]+)/$ inc/php/$1.php [QSA,L]
RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)$ inc/php/$1.php?action=$2 [QSA,L]
RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/$ inc/php/$1.php?action=$2 [QSA,L]
RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([0-9]+)$ inc/php/$1.php?action=$2&id=$3 [QSA,L]

# NO PERMITIR LA DESCARGA DE ARCHIVOS SENSIBLES
# (sintaxis doble para que funcione tanto en Apache 2.2 como 2.4, según lo que soporte el hosting)
<FilesMatch "\.(htaccess|ini|log|cfg|tpl|sql|bak|env)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order Allow,Deny
        Deny from all
    </IfModule>
</FilesMatch>

# Nota: no se fuerza una versión concreta de PHP desde .htaccess.
# Configura PHP 8.x desde el panel de tu hosting para evitar errores 500 en servidores no cPanel.
