/ Las directivas / mod_rewrite funcionan por sí mismas pero no en el contexto de un archivo htaccess completo con concrete5: apache, .htaccess, mod-rewrite, concrete5

Las directivas mod_rewrite funcionan por sí mismas pero no en el contexto de un archivo htaccess completo con concrete5 - apache, .htaccess, mod-rewrite, concrete5

Estoy teniendo problemas para modificar el sitio hsaccessarchivo con algunas directivas mod_rewrite que sé que funcionan de forma aislada pero no en el contexto del archivo htaccess completo. El CMS del sitio es Concrete5, por lo que hay algunos detalles específicos para la configuración de Concrete5 en el archivo htaccess.

Estoy tratando de reescribir URLS de formato

http://www.mywebsite.com/proplist/?location=town&distance=3&proptype=buy&maxPrice=&minPrice=&bedrooms=&propertyType=

a

http://www.mywebsite.com/property/town/buy/

Tengo las siguientes directivas para trabajar de forma aislada (donde creé index.php en una carpeta llamada proplist en webroot en otro servidor web):

RewriteBase /proplist
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/property//?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ http://www.mywebsite.com/proplist/

(Supongo que puedo usar% {REQUEST_FILENAME} en lugar de http://www.mywebsite.com)

No puedo hacer que lo anterior funcione en el contexto del archivo htaccess que ya está en su lugar, que es (con mis enmiendas):

<IfModule mod_rewrite.c>
RewriteEngine On
#
# -- concrete5 urls start --
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
# -- concrete5 urls end --

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# -- rewrite property search urls --
RewriteBase /proplist
RewriteCond %{REQUEST_URI} property
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/proplist//?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ %{REQUEST_FILENAME}/proplist/
RewriteBase /
# -- end rewrite property search urls --

#Gzip
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript
</ifmodule>
#End Gzip

# remove browser bugs
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 1 week"
</IfModule>

## EXPIRES CACHING ##
AddType application/font-wof          .woff
AddType application/x-font-woff       .woff
AddType application/x-woff            .woff

# end of full htaccess file

El resultado de lo anterior es urls como http://www.mywebsite.com/property/woking/buy/ siendo redirigido a http://www.mywebsite.com/index.php

¿Alguien puede ayudar?

Respuestas

0 para la respuesta № 1

Lo primero que debe hacer es colocar todas las reglas de URL de búsqueda de propiedades antes de Las reglas de enrutamiento de concrete5. Las reglas de enrutamiento modifican completamente la URI y, cuando ocurre una redirección, la URI mutilada termina por redirigirse.

Entonces eso significa estas reglas:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

debe ser antes de sus reglas de CMS

También es probable que desee cambiar sus reglas de:

# -- rewrite property search urls --
RewriteBase /proplist
RewriteCond %{REQUEST_URI} property
RewriteRule property/([a-zA-z]+)/([a-zA-z]+)/$ http://www.mywebsite.com/proplist//?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [R]
Redirect 301 /property/ %{REQUEST_FILENAME}/proplist/
RewriteBase /
# -- end rewrite property search urls --

a:

# -- rewrite property search urls --
RewriteRule ^property/([a-zA-z]+)/([a-zA-z]+)/$ /proplist/?location=$1&distance=3&proptype=$2&maxPrice=&minPrice=&bedrooms=&propertyType= [L]
RewriteRule ^property/$ /proplist/ [L]
# -- end rewrite property search urls --

Pero no estoy realmente seguro de cuál era el punto de sus reglas originales. Son una mezcla de mod_alias y mod_rewrite que seguramente será un desastre. Cambiar las banderas de [L] a [L,R=301] si realmente desea redireccionar en lugar de reescribir (que es lo que está solicitando, reescribiendo) no es redireccionando). Así que esas 2 reglas deben ir justo debajo de la que redirige a www.