apache - rewritecond - rewriterule htaccess ejemplos
Clean URL Redirect Loop (4)
Intento crear URL limpias en mi sitio web. Ahora logré configurar apache para que cada solicitud como mysite.com/page funcione. Pero también quiero que las solicitudes de mysite.com/page.php se redirijan a mysite.com/page . Establecí la variable de entorno en .htaccess para verificar si ya se me redirigió para evitar bucles, pero todavía los obtengo ... Aquí está el .htaccess:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# set the variable
RewriteRule ^$ - [L]
RewriteRule ^(.*)$ $1 [E=REWROTE:0]
# this works fine
# make mysite.com/page work and set REWROTE variable to 1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteRule ^(.*)$ $1.php [L,E=REWROTE:1]
# but if i enable this, i get redirected and then stuck in a loop
# redirect mysite.com/page.php to mysite.com/page , but only if REWROTE not 1
#RewriteCond %{ENV:REWROTE} !^1$
#RewriteRule ^(.*)/.php$ $1 [R=301,L]
¡Gracias!
Agregue esta regla sobre las reglas de reescritura existentes para detener la redirección si la solicitud ya se redirigió una vez ( ref ):
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
Puede verificar la línea de solicitud de lo que originalmente se solicitó:
RewriteCond %{THE_REQUEST} ^[A-Z]+/ (/[^/ ]*)/.php[?/ ]
RewriteRule /.php$ %1 [R=301,L]
Ah, y el primer argumento de la directiva RewriteCond
no es una expresión regular, sino solo una cadena. Entonces escapando de .
Está Mal.
¿Hay algún motivo por el que no puedas utilizar el carácter de finalización de cadena, $?
RewriteRule ^/(.+)/.php$ /$1
redireccionará /page.php a / page, pero no hará ningún redireccionamiento en / page.
Fundamentalmente, usar técnicas como establecer variables de entorno y agregar comprobaciones para REDIRECT_STATUS no va a ser muy sólido.
Otra forma rápida y sucia de evitar el bucle en estas situaciones que he encontrado es agregar una cadena de consulta y luego verificar su existencia en el redireccionamiento.
RewriteCond %{QUERY_STRING} !a=a
RewriteRule ^(.*)/.php$ %1 [NC,R=301,L]
RewriteRule ^(.*)$ $1.php?a=a [NC,L]
encontrado en este sitio: http://answers.oreilly.com/topic/542-how-to-properly-redirect-for-maximum-seo/