una rewriterule rewritecond redirigir otra mod_rewrite htaccess ejemplos configurar carpeta activar apache mod-rewrite caching

apache - rewriterule - rewritecond htaccess



RewriteRule revisa el archivo en la ruta de reescritura del archivo (2)

Otro enfoque sería mirar primero si hay una representación chateada disponible:

RewriteCond %{DOCUMENT_ROOT}/cache/$0 -f RewriteRule ^pages/[^//.]+$ cache/$0.html [L,QSA] RewriteRule ^pages/([^//.]+)$ pages.php?p=$1 [L,QSA]

¿Cómo puede usar ModRewrite para verificar si existe un archivo de caché y, si lo hace, reescribirlo en el archivo de caché y volver a escribir en un archivo dinámico.

Por ejemplo, tengo la siguiente estructura de carpetas:

pages.php cache/ pages/ 1.html 2.html textToo.html etc.

¿Cómo configuraría RewriteRules para esto para que la solicitud se pueda enviar de esta manera?

example.com/pages/1

Y si el archivo de caché existe, vuelva a escribir tot el archivo de caché, y si el archivo de caché no existe, vuelva a escribir en pages.php? P = 1

Debería ser algo como esto: (tenga en cuenta que esto no funciona, de lo contrario no me habría preguntado esto)

RewriteRule ^pages/([^//.]+) cache/pages/$1.html [NC,QSA] RewriteCond %{REQUEST_FILENAME} -f [NC,OR] RewriteCond %{REQUEST_FILENAME} -d [NC] RewriteRule cache/pages/([^//.]+).html pages.php?p=$1 [NC,QSA,L]

Puedo hacer esto utilizando PHP, pero pensé que era posible usar mod_rewrite.


RewriteRule ^pages/([^//.]+) cache/pages/$1.html [NC,QSA] # At this point, we would have already re-written pages/4 to cache/pages/4.html RewriteCond %{REQUEST_FILENAME} !-f # If the above RewriteCond succeeded, we don''t have a cache, so rewrite to # the pages.php URI, otherwise we fall off the end and go with the # cache/pages/4.html RewriteRule ^cache/pages/([^//.]+).html pages.php?p=$1 [NC,QSA,L]

Desactivar MultiViews es crucial (si los tiene habilitados) también.

Options -MultiViews

De lo contrario, la solicitud inicial (/ pages / ...) se convertirá automáticamente a /pages.php antes de que mod_rewrite entre en acción. También puede cambiar el nombre de pages.php a otra cosa (y actualizar la última regla de reescritura también) para evitar el Conflicto de MultiViews.

Editar: Inicialmente RewriteCond ... !-d pero es extraño.