Estoy moviendo un sitio antiguo de apache 2.2 a 2.4
Tengo un archivo vhost.conf que contiene la siguiente regla de reescritura:
RewriteRule ^/news/[0-9]{4}/[A-za-z]{3}/([0-9a-zA-Z-]*)/([0-9]{4})([0-9]{6})/?$ "/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" [NE,L]Así que estoy tratando de convertir esta URL: https://example.com/news/2016/Feb/Article-Title/0025012345
en esto: https://example.com/news/article.cfm?article_id=012345&urltitle=Article-Title&clk=0025
Dependiendo de lo que ponga en la segunda parte de RewriteRule, obtengo lo siguiente:
"https://example.com/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" esto funciona bien, pero no quiero especificar el nombre de host, ya que se usa en los servidores dev/staging/live, entonces las URL cambian
"/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" arroja un 404 que aparece en access_log
"news/article.cfm?article_id=$3&urltitle=$1&clk=$2" arroja un 503 que aparece en access_log
Así que sé que estoy identificando correctamente la URL en la primera parte de la regla y tomando los componentes correctos con mi expresión regular, ya que especificar el nombre de dominio completo muestra la manipulación correcta de la URL.
Sin embargo, estoy fallando por completo en hacer una redirección relativa, y estoy seguro de que esta regla funciona en Apache 2.2
Estoy usando el siguiente software:
Versión de CentOS Linux 7.7.1908 (núcleo)
Versión del servidor: Apache/2.4.6 (CentOS) Servidor creado: 8 de agosto de 2019 11:41:18
Obviamente, la respuesta está en el manual... que debería haber leído con más detalle:
https://httpd.apache.org/docs/2.4/rewrite/remapping.html#viejo-a-nuevo
Supongamos que recientemente cambiamos el nombre de la página foo.html a bar.html y ahora queremos proporcionar la URL anterior para compatibilidad con versiones anteriores. Sin embargo, queremos que los usuarios de la antigua URL ni siquiera reconozcan que se cambió el nombre de las páginas; es decir, no queremos que la dirección cambie en su navegador.
RewriteEngine on RewriteRule "^/foo\.html$" "/bar.html" [PT] La clave aquí es el [PT] , que lo arregló para mí:
RewriteRule ^/news/[0-9]{4}/[A-za-z]{3}/([0-9a-zA-Z-]*)/([0-9]{4})([0-9]{6})/?$ "/news/article.cfm?article_id=$3&urltitle=$1&clk=$2" [PT,NE,L]