2016-07-15 7 views
1

Zunächst einmal weiß ich, dass es viele ähnliche Fragen gibt. Ich habe alles gelesen, was ich finden kann, aber die Lösungen, die ich woanders sehe, scheinen nicht für mich zu funktionieren. Ich hoffe wirklich, dass mir jemand hier einen Einblick geben kann.Dateierweiterung verstecken und auf https umleiten

Ich versuche Apaches .htaccess Direktiven zu verwenden, um spezifische Seiten auf meinem Server zu zwingen, ssl zu verwenden. Zusätzlich zu diesen Direktiven verwende ich auch einige Umschreibungen, um die Erweiterungen .php und .html zu maskieren.

Ich habe eine Seite erstellt, https-test.html. Ich mag die Seite speziell auf immer weitergeleitet, damit es https verwendet und damit .html abgezogen wird, wie https://www.example.com/https-test

aber ich scheine immer mit einer Schlaufe am Ende. Das Lesen der Apache-Dokumente für 6 Stunden brachte mich näher, aber mir fehlt noch etwas.

Unten ist meine annotierte htaccess-Datei.

RewriteEngine on 

# If port is insecure... 
RewriteCond %{SERVER_PORT} ^80$ 
# And requested URI is /https-test... 
RewriteCond %{REQUEST_URI} ^(.*/)https-test$ [NC] 
# Then point the server to the secure url: 
RewriteRule . "https://www.example.com/https-test" [L,R] 


# The next few lines try matching extensionless requests to .php files 
# If the requested file is not a directory... 
RewriteCond %{REQUEST_FILENAME} !-d 
# And we CAN find a .php file matching that name... 
RewriteCond %{REQUEST_FILENAME}\.php -f 
# Then point us to that .php file and append the query string. 
RewriteRule ^(.+)$ $1.php [L,QSA] 


# These next few lines were added by the previous project owner 
# They're supposed to redirect requests like /foo.html to /foo, 
# But I suspect these might be the culprit 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)/$ /$1 [R=301,NE,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ /$1.html [NE,L] 


# Next few lines are legacy SEO stuff, some pages were linked to as 
# php but now are html 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} .php$ 
RewriteRule ^(.*).php$ /$1.html [L,NE] 

Also das ist der Code, den ich in meinem htaccess habe. Und wenn ich in Chrome zu http://www.example.com/https-test gehe, bekomme ich www.mysite.com Sie zu oft umgeleitet.

Antwort

1

Sie sollten wahrscheinlich nur den Code ein wenig umschreiben. Sie versuchen, beide Erweiterungsdateien mit php und html abzugleichen und sehen nicht so aus, als würden Sie die einzelnen Bedingungen berücksichtigen. Sie sollten eine Bedingung hinzufügen, um sicherzustellen, dass sie nicht versuchen, die gleichen Dinge zu tun.

Sichern Sie Ihren Code, ersetzen Sie Ihren Code mit diesem und versuchen Sie es. Löschen Sie Ihren gesamten Cache, bevor Sie versuchen.

RewriteEngine on 
# If port is insecure... redirect for a specific page 
RewriteCond %{HTTPS} !^on [OR] 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^http-test/?$ https://www.example.com%{REQUEST_URI} [R=301,L] 

# Next few lines are legacy SEO stuff, some pages were linked to as 
# php but now are html 
RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php 
RewriteRule^/%1? [R=301,L] 

# The next few lines try matching extensionless requests to .php files 
# If the requested file is not a directory and php file exists 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1.php [L,QSA] 

#remove trailing slash and is not a php file 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^\.]+)/$ /$1 [R=301,NE,L] 

#finally redirect extensionless URI to html 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ /$1.html [NE,L] 

Hinweis Ich habe dies nicht vollständig getestet.

+0

Vielen Dank. Ihre Änderungen machen die Dinge sicherlich sauberer und verständlicher. Diese Regeln funktionieren hervorragend für die '.php' und' .html' Neuschreibungen. Leider bekomme ich immer noch eine Umleitungsschleife für 'https: // www.example.com/ https-test'. Ich verstehe es wirklich nicht. – wrydere

+1

Ändern Sie 301, 302, um den Cache zu löschen, und sehen Sie, ob das hilft. Wenn es funktioniert, kannst du es wieder in 301 ändern. –

+0

Habe meinen Cache gelöscht, habe verschiedene Browser ausprobiert, bekomme immer noch eine Schleife ... – wrydere

Verwandte Themen