/ Die Anweisungen von / mod_rewrite funktionieren allein, jedoch nicht im Kontext der vollständigen htaccess-Datei mit concrete5 - Apache, .htaccess, Mod-rewrite, concrete5

mod_rewrite-Direktiven funktionieren für sich selbst, aber nicht im Kontext einer vollständigen htaccess-Datei mit concrete5 - Apache, .htaccess, mod-rewrite, concrete5

Ich habe Probleme, den Zugriff auf eine Website zu korrigierenDatei mit einigen mod_rewrite-Direktiven, von denen ich weiß, dass sie isoliert arbeiten, jedoch nicht im Kontext der vollständigen htaccess-Datei. Der CMS der Site ist Concrete5, daher gibt es einige Besonderheiten für die Concrete5-Konfiguration in der Datei htaccess.

Ich versuche, URLs des Formats neu zu schreiben

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

zu

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

Ich habe die folgenden Anweisungen, um isoliert zu arbeiten (wo ich index.php in einem Ordner namens proplist unter dem Webroot auf einem anderen Webserver erstellt habe):

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/

(Ich denke, ich kann% {REQUEST_FILENAME} anstelle von verwenden http://www.mywebsite.com)

Ich kann das Obige nicht dazu bringen, im Kontext der bereits vorhandenen htaccess-Datei zu arbeiten, die (mit meinen Ergänzungen):

<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

Das Ergebnis des obigen ist URLs wie http://www.mywebsite.com/property/woking/buy/ umgeleitet zu werden http://www.mywebsite.com/index.php

Kann jemand helfen?

Antworten:

0 für die Antwort № 1

Als Erstes müssen Sie alle Regeln für die Eigenschaftssuche-URL einfügen Vor die konkreten5 Routing-Regeln. Die Routing-Regeln beeinträchtigen die URI vollständig, und wenn eine Umleitung stattfindet, wird die entstellte URI umgeleitet.

Das bedeutet also diese Regeln:

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

muss sein Vor Ihre CMS-Regeln.

Sie möchten wahrscheinlich auch Ihre Regeln ändern von:

# -- 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 --

zu:

# -- 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 --

Aber ich bin mir nicht wirklich sicher, worauf es bei Ihren ursprünglichen Regeln ankommt. Sie sind eine Mischung aus mod_alias und mod_rewrite, was sicherlich ein Durcheinander war. Ändern Sie die Flaggen von [L] zu [L,R=301] wenn Sie tatsächlich umleiten möchten anstatt umzuschreiben (was Sie verlangen, umschreiben ist nicht Umleitung). Diese beiden Regeln müssen also direkt unter der Regel liegen, zu der weitergeleitet wird www.