You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess mod_rewrite规则异常导致URL返回404问题求助

问题根因
  • 强制添加.php后缀的重写规则放在了RewriteEngine On之前,mod_rewrite模块未激活时规则完全不生效
  • 重复声明RewriteEngine On,规则执行顺序混乱,先执行了内部无后缀重写逻辑,未触发外部301跳转补后缀的逻辑
  • 通用.php重写规则缺少L标记,后续规则会覆盖当前规则执行结果
  • 显式301跳转和通用重写规则顺序颠倒,部分路径跳转逻辑冲突
修复后的完整.htaccess配置
Options +FollowSymLinks
Options -MultiViews
RewriteEngine On

# 原有自定义301跳转规则
Redirect 301 /si-no-queda-satisfecho-le-devolvemos-el-dinero.html https://www.academiapinto.es/otros-enlaces/si-no-queda-satisfecho-le-devolvemos-el-dinero.php
Redirect 301 /si-no-queda-satisfecho-le-devolvemos-el-dinero.php https://www.academiapinto.es/otros-enlaces/si-no-queda-satisfecho-le-devolvemos-el-dinero.php

#parche POLILLA
Redirect 301 /temario-Guardias-Jovenes-(Polillas).php https://www.academiapinto.es/oposiciones-de-ingreso-Colegio-Guardias-Jovenes-Duque-de-Ahumada.php

Redirect 301 /blog-academia-pinto-para-preparar-tus-oposiciones-para-la-PN.php https://www.academiapinto.es/blog/articulo-academia-pinto-para-preparar-tus-oposiciones-para-la-PN.php
Redirect 301 /blog-camino-a-baeza.php https://www.academiapinto.es/blog/articulo-camino-a-baeza.php
Redirect 301 /blog-como-seleccionar-una-buena-academia-de-oposiciones-para-guardia-civil-y-policia-nacional.php https://www.academiapinto.es/blog/articulo-como-seleccionar-una-buena-academia-de-oposiciones-para-guardia-civil-y-policia-nacional.php
Redirect 301 /blog-dime-como-estudias.php https://www.academiapinto.es/blog/articulo-dime-como-estudias.php
Redirect 301 /blog-documentacion-instancia-oposicion-ingreso-a-la-guardia-civil.php https://www.academiapinto.es/blog/articulo-documentacion-instancia-oposicion-ingreso-a-la-guardia-civil.php
Redirect 301 /blog-llego-la-hora.php https://www.academiapinto.es/blog/articulo-llego-la-hora.php
Redirect 301 /blog-primer-concurso-de-fotografia.php https://www.academiapinto.es/blog/articulo-primer-concurso-de-fotografia.php
Redirect 301 /blog-psicotecnicos-recomendaciones-necesarias.php https://www.academiapinto.es/blog/articulo-psicotecnicos-recomendaciones-necesarias.php
Redirect 301 /blog-que-no-puedes-olvidar-en-tu-examen-para-la-guardia-civil.php https://www.academiapinto.es/blog/articulo-que-no-puedes-olvidar-en-tu-examen-para-la-guardia-civil.php
Redirect 301 /blog-tecnicas-de-estudio-para-aprobar-las-oposiciones-de-gc.php https://www.academiapinto.es/blog/articulo-tecnicas-de-estudio-para-aprobar-las-oposiciones-de-gc.php
Redirect 301 /blog-tienes-la-documentacion.php https://www.academiapinto.es/blog/articulo-tienes-la-documentacion.php

Redirect 301 /noticia-Academia-Pinto-incrementa-las-horas-de-clases-online.php https://www.academiapinto.es/news/noticia-Academia-Pinto-incrementa-las-horas-de-clases-online.php
Redirect 301 /noticia-instrucciones-rellenar-instancia-ingreso-guardia-civil.php https://www.academiapinto.es/news/noticia-instrucciones-rellenar-instancia-ingreso-guardia-civil.php
Redirect 301 /noticia-oferta-curso-online-ingreso-Guardia-Civil.php https://www.academiapinto.es/news/noticia-oferta-curso-online-ingreso-Guardia-Civil.php

# las de los empleos
Redirect 301 /curso-a-distancia-ingreso-guardia-civil https://www.academiapinto.es/temario-de-ingreso-guardia-civil.php
Redirect 301 /curso-a-distancia-ingreso-policia-nacional-escala-basica.php https://www.academiapinto.es/temario-de-ingreso-a-policia-nacional-escala-basica.php
Redirect 301 /curso-a-distancia-cabo-guardia-civil.php https://www.academiapinto.es/temario-de-ascenso-a-cabo-guardia-civil.php
Redirect 301 /curso-a-distancia-cabosub-guardia-civil.php https://www.academiapinto.es/temario-de-ascenso-a-cabo-guardia-civil.php
Redirect 301 /curso-a-distancia-suboficial-guardia-civil.php https://www.academiapinto.es/temario-de-ascenso-a-suboficial-guardia-civil.php
Redirect 301 /curso-a-distancia-oficial-guardia-civil.php https://www.academiapinto.es/temario-de-ascenso-a-oficial-guardia-civil.php

# antiguas de JUAN arregladas
# ahora cambiamos por las mejoras SEO las siguientes.
Redirect 301 /clases-presenciales-de-ingreso-guardia-civil.php https://www.academiapinto.es/curso-de-ingreso-a-guardia-civil.php
Redirect 301 /clases-online-de-ingreso-guardia-civil.php https://www.academiapinto.es/curso-online-de-ingreso-a-guardia-civil.php

Redirect 301 /clases-online-de-cabo-guardia-civil.php https://www.academiapinto.es/curso-online-de-ascenso-a-cabo-guardia-civil.php
Redirect 301 /curso-online-de-cabo-guardia-civil.php https://www.academiapinto.es/curso-online-de-ascenso-a-cabo-guardia-civil.php

# seguimos.
Redirect 301 /clases-online-de-oficial-guardia-civil.php https://www.academiapinto.es/curso-online-de-ascenso-a-oficial-guardia-civil.php
Redirect 301 /clases-online-de-suboficial-guardia-civil.php https://www.academiapinto.es/curso-online-de-ascenso-a-suboficial-guardia-civil.php
Redirect 301 /clases-presenciales-de-ascenso-a-oficial-guardia-civil.php https://www.academiapinto.es/curso-de-ascenso-a-oficial-guardia-civil.php
Redirect 301 /clases-presenciales-de-ascenso-a-suboficial-guardia-civil.php https://www.academiapinto.es/curso-de-ascenso-a-suboficial-guardia-civil.php

Redirect 301 /temario-Prueba-Conocimientos-Guardias-Jovenes-(Polillas).php https://www.academiapinto.es/temario-Guardias-Jovenes-(Polillas).php

#parche NO-CNP
Redirect 301 /curso-a-distancia-guardia-civil-y-policia-nacional.php https://www.academiapinto.es/curso-online-de-ingreso-a-guardia-civil.php
Redirect 301 /temario-Guardias-Jovenes-(Polillas).php https://www.academiapinto.es/temario-Guardias-Jovenes-(Polillas).php

# 单路径自定义跳转
RewriteRule ^/temario-de-ingreso-guardia-civil$ https://www.academiapinto.es/temario-de-ingreso-guardia-civil.php [L,R=301]

# 强制所有存在的PHP文件访问时带.php后缀
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteRule ^(.*)$ /$1.php [R=301,L]

# 内部重写无后缀请求到对应PHP文件
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

# 首页跳转规则(注释保留原有配置)
# RewriteRule ^index\.php$ https://www.academiapinto.es/ [L,R=301]
# RewriteRule ^index\.htm$ https://www.academiapinto.es/ [L,R=301]
# RewriteRule ^index\.html$ https://www.academiapinto.es/ [L,R=301]

# 路由转发到index.php
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

# 参数路由规则(注释保留原有配置)
# RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)$ /index.php [L]
# RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)$ /index.php [L]
# RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]+)$ /index.php [L]
# RewriteRule ^([A-Za-z0-9_]+)$ /index.php [L]
# --- #RewriteRule ^(.*) /index.php?p1=ERROR_MODRW_ACCESS [L]

##############################################################

# Enable GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</ifmodule>

# Expires Headers - 2678400s = 31 days
<ifmodule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType image/gif "access plus 2678400 seconds"
  ExpiresByType image/jpeg "access plus 2678400 seconds"
  ExpiresByType image/png "access plus 2678400 seconds"
  ExpiresByType text/css "access plus 518400 seconds"
  ExpiresByType text/javascript "access plus 2678400 seconds"
  ExpiresByType application/x-javascript "access plus 2678400 seconds"
</ifmodule>

# Cache Headers
<ifmodule mod_headers.c>
  # Cache specified files for 31 days 2678400
  <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
  Header set Cache-Control "max-age=2678400, public"
  </filesmatch>
  # Cache HTML files for a couple hours 7200
  <filesmatch "\.(html|htm)$">
  Header set Cache-Control "max-age=7200, private, must-revalidate"
  </filesmatch>
  # Cache PDFs for a day 86400
  <filesmatch "\.(pdf)$">
  Header set Cache-Control "max-age=86400, public"
  </filesmatch>
  # Cache Javascripts for 31 days 2678400
  <filesmatch "\.(js)$">
  Header set Cache-Control "max-age=2678400, private"
  </filesmatch>
</ifmodule>

############################################################## 
注意事项

替换配置后请使用浏览器无痕模式测试,301为永久重定向,普通模式下浏览器会缓存旧的跳转规则,清理浏览器缓存或等待缓存过期后规则才会生效。

内容的提问来源于stack exchange,提问作者Manu Fernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:45:06