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.