.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
相关产品推荐
相关产品推荐

