Antes de usar la declaración de redirect 301 . Ahora estoy en una posición en la que necesito usar la declaración RewriteRule para hacer uso de las banderas (redirigir sin la cadena de consulta), pero por alguna razón, no funciona.
Este es mi archivo .htaccess :
# BEGIN WordPress # Директивы (строки) между `BEGIN WordPress` и `END WordPress` # созданы автоматически и подлежат изменению только через фильтры WordPress. # Сделанные вручную изменения между этими маркерами будут перезаписаны. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] #this is working redirect 301 /bad-link/ http://localhost:8000/ #this is not working RewriteRule ^test/bad-link.*$ "http://localhost:8000" [NC,QSD,L,R=301] #this is also not working RewriteRule "test/bad-link" "http://localhost:8000" [R=301] </IfModule> # END WordPressTienes las directivas en el orden incorrecto. Las redirecciones mod_rewrite (es decir, las directivas RewriteRule ) deben desaparecer antes de que el controlador frontal de WordPress vuelva a escribir. Al colocarlos después de las directivas de WordPress, nunca se procesarán, ya que la solicitud ya se ha reescrito en el controlador frontal de WP ( index.php ) y el procesamiento se detiene.
No debe editar el código dentro del bloque de código # BEGIN WordPress / # END WordPress ya que WordPress mismo intenta mantener este bloque de código y sus ediciones pueden sobrescribirse.
Debe colocar sus directivas de redirección RewriteRule 301 antes del marcador de comentario # BEGIN WordPress . No necesita repetir la directiva RewriteEngine On que ocurre más tarde, dentro del bloque de código de WordPress.
La directiva mod_alias Redirect habría "funcionado" porque no depende del orden de las directivas en relación con las otras directivas mod_rewrite. Diferentes módulos de Apache se ejecutan de forma independiente y en diferentes momentos durante la solicitud, independientemente del orden de las directivas en el archivo de configuración. mod_rewrite se ejecuta antes que mod_alias y la Redirect siempre se ejecuta independientemente del resultado de las directivas mod_rewrite anteriores (a menos que activen una redirección externa).
En otras palabras:
# External redirects... RewriteRule ^test/bad-link http://localhost:8000/ [NC,QSD,R=301,L] # BEGIN WordPress : etc. Tenga en cuenta que el .*$ al final de su expresión regular es superfluo.
NB: Pruebe primero con redireccionamientos 302 (temporales) para evitar posibles problemas de almacenamiento en caché.