Lo siguiente funciona bien para permitir que PHP se ejecute en dos archivos XML:
<FilesMatch ^(opensearch|sitemap)\.xml$> AddHandler application/x-httpd-php5 .xml </FilesMatch>Sin embargo , desafortunadamente, esta regla permitiría que esto suceda también en cualquier directorio secundario.
¿Cómo forzamos a Apache a que coincida solo con los archivos en el directorio actual y no con los directorios secundarios?
Realmente me gustaría:
.htaccess secundario en todos los directorios secundarios posibles.If la directiva se puede usar para proporcionar una condición para que el controlador se agregue solo para archivos que coincidan con el patrón en la carpeta actual.
El siguiente ejemplo agregará el controlador solo para archivos en la raíz del documento, como /sitemap.xml y /opensearch.xml pero no para /folder/sitemap.xml y /folder/opensearch.xml
<FilesMatch ^(opensearch|sitemap)\.xml$> <If "%{REQUEST_URI} =~ m#^\/(opensearch|sitemap)\.xml$#"> AddHandler application/x-httpd-php .xml </If> </FilesMatch> En el ejemplo anterior, la condición es comprobar que REQUEST_URI coincida con el patrón de expresión regular delimitado en m# # . El operador de comparación ~= verifica que una cadena coincida con una expresión regular.
El patrón ^\/(opensearch|sitemap)\.xml$ coincide con la variable REQUEST_URI (el componente de ruta del URI solicitado) como /opensearch.xml o /sitemap.xml
^ # startwith \/ # escaped forward-slash (opensearch|sitemap) # "opensearch" or "sitemap" \. # . xml # xml $ # endwith¿Has probado H= en una regla de reescritura?
RewriteEngine On RewriteRule ^(opensearch|sitemap)\.xml$ . [H=application/x-httpd-php5]Rewrite in htaccess tiene la propiedad incorporada de que esos nombres de archivo en cualquier subdirectorio tendrán el subdirectorio presente en la cadena contra la que se prueba la expresión regular, por lo que la expresión regular anclada no coincidirá en los subdirectorios.