El problema: Algunas páginas html de equivalentes php (apple.html, apple.php; orange.html, orange.php), pero no todas do (grapes.html).htaccess reescriba si existe un archivo redirigido
El objetivo: si existe la versión de php, vuelva a escribir, de lo contrario, consérvela en la versión html.
que tengo:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)\.html$ /$1.php [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$ /$1.html [R]
cuestiones interesantes:
Si no pongo/frente a $ 1.php luego termino con: (site.com/document/root/path es decir: site.com/home/user/www/file.php)
Al llamar al segundo RewriteRule, recibo http://site.com/http:/site.com/page.html y me dice que hubo demasiados redireccionamientos. Observe que solo hay uno/en el segundo http.
He hecho algunos progresos, he agregado RewriteBase/y eliminado el/antes de $ 1, pero sigo recibiendo el error de demasiados redireccionamientos (la página web en site.com/page.html ha provocado demasiados redireccionamientos Limpiar sus cookies para este sitio o permitir cookies de terceros puede solucionar el problema. De lo contrario, posiblemente sea un problema de configuración del servidor y no un problema con su computadora).
Parece que si reescribo html -> php -> html obtengo el mismo error. Entonces parece que la lógica está funcionando, pero ese tipo de lógica no está permitida. No se me ocurre otra forma de ver si existe una "versión php" de un archivo. La única manera que puedo pensar es hacer algo similar a:
RewriteCond ^(.*)\.html$ $1.php -f
RewriteRule ^(.*)\.html$ $1.php [R]
Por desgracia, eso no lo hace bastante trabajo (supongo que porque tiene tres segmentos en la línea de estado). Estoy intentando conseguir el nombre del archivo sin la extensión, a continuación, diga si filename.php es un archivo, vuelve a escribir pagina.html a page.php
Cuando leí por primera vez su email yo era como ah, ja! Entonces lo intenté, y en vano :(Todavía va a page.html incluso si existe el php. ¿Por casualidad significaba $ 1 en lugar de% 1 en el segundo RewriteCond? – user677285
Acabo de probar en mi apache y funciona ¿Estás usando httpd.conf o .htaccess? ¿Publicarás todas tus reglas de reescritura si hay otras? Se supone que el símbolo% se usa en RewriteCond, $ se usa en RewriteRule, al menos esto es lo que recuerdo. :) – szemian