Ja, ich habe das Apache-Handbuch gelesen und hier gesucht. Aus irgendeinem Grund kann ich das einfach nicht zum Laufen bringen. Am nächsten kommt es, wenn es die Erweiterung entfernt, aber es zeigt zurück auf das Stammverzeichnis. Ich möchte, dass dies nur in dem Verzeichnis funktioniert, das die .htaccess
Datei enthält .
Ich muss drei Dinge mit der .htaccess
Datei machen.
Ich brauche es, um die .php zu entfernen
ein. Ich habe mehrere Seiten, die Registerkarten verwenden, und die URL sieht wie die Registerkarte page.php # aus. Ist dies möglich?
b. Ich habe eine Seite, die eine an die URL angehängte Sitzungs-ID verwendet, um sicherzustellen, dass Sie vom richtigen Ort gekommen sind
www.domain.com/download-software.php?abcdefg
.
Ist das möglich? Muss ich dabei auch ".php" aus den Links in meiner Header-Navigations-Include-Datei entfernen? SollteIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Ich möchte, dass "www" vor jeder URL erzwungen wird, also ist es nicht
domain.com
, aberwww.domain.com/page
. - Ich möchte alle abschließenden Schrägstriche von den Seiten entfernen.
Ich werde weiter suchen, es versuchen usw. Würde es Probleme geben, in einem Unterverzeichnis zu sein?
Antworten:
Gumbos Antwort in der Frage zum Stapelüberlauf Wie man die .html-Erweiterung mit Apache mod_rewrite versteckt, sollte gut funktionieren.
Zu 1) Ändern Sie die .html in .php
Zu a.) Ja, das ist möglich, fügen Sie einfach
#tab
der URL hinzu.Zu b.) Dies ist mit
QSA
(Query String Append) möglich, siehe unten.Dies sollte auch in einem Unterverzeichnispfad funktionieren:
quelle
[L,
Leerzeichen entfernenQSA]
, andernfalls wird ein 500 Internal Server Error verursacht./index/bla/bla
das gleiche sein wieindex.php
Apache mod_rewrite
Was Sie suchen, ist mod_rewrite ,
Im Allgemeinen
mod_rewrite
wird das angeforderte Dokument mit den angegebenen regulären Ausdrücken abgeglichen und anschließend intern (innerhalb des Apache-Prozesses) oder extern (im Client-Browser) neu geschrieben. Diese Umschreibungen können so einfach sein wie die interne Übersetzung von example.com/foo in eine Anfrage für example.com/foo/bar.Die Apache-Dokumente enthalten eine
mod_rewrite
Anleitung, und ich denke, einige der Dinge, die Sie tun möchten, werden darin behandelt. Detaillierte mod_rewrite Anleitung .Erzwinge die
www
SubdomainDie Anleitung zum Umschreiben enthält Anweisungen hierzu im Beispiel Canonical Hostname .
Entfernen Sie die nachgestellten Schrägstriche (Teil 1).
Ich bin mir nicht sicher, warum Sie dies tun möchten, da die Anleitung zum Umschreiben ein Beispiel für das genaue Gegenteil enthält , dh immer einen abschließenden Schrägstrich enthält. Die Dokumente legen nahe, dass das Entfernen des abschließenden Schrägstrichs ein großes Potenzial für Probleme hat:
Vielleicht könnten Sie näher erläutern, warum Sie den abschließenden Schrägstrich ständig entfernen möchten?
.php
Verlängerung entfernenDas nächste, was ich mir vorstellen kann, ist, jedes Anforderungsdokument mit der Erweiterung .php intern neu zu schreiben, dh example.com/somepage wird stattdessen als Anforderung für example.com/somepage.php verarbeitet. Beachten Sie, dass für diese Vorgehensweise jede Seite tatsächlich als somepage.php im Dateisystem vorhanden sein muss.
Mit der richtigen Kombination von regulären Ausdrücken sollte dies bis zu einem gewissen Grad möglich sein. Ich kann jedoch einige mögliche Probleme vorhersehen, wenn Indexseiten nicht korrekt angefordert werden und Verzeichnisse nicht korrekt übereinstimmen.
Dadurch wird beispielsweise example.com/test als Anforderung für example.com/test.php korrekt umgeschrieben:
Wird jedoch dazu führen, dass example.com nicht geladen werden kann, da es kein example.com/.php gibt
Ich gehe davon aus, dass das Auswählen einer Anforderung für einen Verzeichnisindex aus einer Anforderung eines Dateinamens im übergeordneten Verzeichnis fast unmöglich wird, wenn Sie alle nachgestellten Schrägstriche entfernen. Wie ermitteln Sie eine Anfrage für das Verzeichnis 'foobar':
aus einer Anfrage für eine Datei namens foobar (die eigentlich foobar.php ist)
Es könnte möglich sein, wenn Sie die
RewriteBase
Direktive verwendet haben. Wenn Sie dies tun, wird dieses Problem jedoch viel komplizierter, da SieRewriteCond
Anweisungen benötigen , um auf Dateisystemebene zu überprüfen, ob die Anforderung einem Verzeichnis oder einer Datei zugeordnet ist.Das heißt, wenn Sie Ihre Anforderung entfernen, alle nachgestellten Schrägstriche zu entfernen und stattdessen nachfolgende Schrägstriche zwangsweise hinzuzufügen, wird das Problem "Keine .php-Erweiterung" etwas vernünftiger.
Dies ist immer noch nicht perfekt - an jede Anforderung für eine Datei wird immer noch .php intern an die Anforderung angehängt. Eine Anfrage für 'hi.txt' fügt dies in Ihre Fehlerprotokolle ein:
Es gibt aber noch eine andere Option: Setzen Sie die Anweisungen
DefaultType
undDirectoryIndex
wie folgt :Update 14.11.2013 - Das obige Snippet wurde korrigiert, um die Beobachtung von Nicorellius zu berücksichtigen
Jetzt sind Anforderungen für hi.txt (und alles andere) erfolgreich, Anforderungen an example.com/test geben die verarbeitete Version von test.php zurück und index.php-Dateien funktionieren wieder.
Ich muss Kredit geben, wo Kredit für diese Lösung fällig ist, wie ich es Michael J. Radwins Blog gefunden habe, indem ich Google nach PHP ohne Erweiterung Apache durchsucht habe .
Entfernen Sie nachgestellte Schrägstriche
Einige
apache remove trailing slashes
Suchanfragen haben mich zu einigen Seiten zur Suchmaschinenoptimierung geführt. Anscheinend stellen einige Content-Management-Systeme (in diesem Fall Drupal) Inhalte mit und ohne abschließenden Schrägstrich in URls zur Verfügung, was in der SEO-Welt dazu führt, dass Ihre Website eine doppelte Inhaltsstrafe erleidet. QuelleDie Lösung scheint ziemlich trivial zu sein, da
mod_rewrite
wir unter der Bedingung, dass die angeforderte Ressource mit a endet,/
neu schreiben und die URL durch Zurücksenden des301 Permanent Redirect
HTTP-Headers neu schreiben .Hier ist sein Beispiel, bei dem davon ausgegangen wird, dass Ihre Domain blamcast.net ist und der Anfrage optional ein Präfix vorangestellt werden kann
www.
.Jetzt kommen wir irgendwohin. Lassen Sie uns alles zusammenfügen und sehen, wie es aussieht.
Obligatorisch
www.
, nein.php
und keine nachgestellten SchrägstricheDies setzt voraus, dass die Domain foobar.com ist und auf dem Standardport 80 ausgeführt wird.
Das 'R'-Flag wird im
RewriteRule
Abschnitt zur Anweisung beschrieben. Snippet:Schlussbemerkung
Ich konnte die Schrägstrichentfernung nicht erfolgreich ausführen. Die Umleitung führte zu endlosen Umleitungsschleifen. Nachdem ich die ursprüngliche Lösung genauer gelesen habe, habe ich den Eindruck, dass das obige Beispiel für sie funktioniert, da ihre Drupal-Installation konfiguriert ist. Er erwähnt speziell:
In Bezug auf URLs, die mit und ohne Schrägstrich enden. Außerdem,
quelle
DirectoryIndex index index.html
? oderDirectoryIndex index.php index.html
?Zusätzlich zu anderen Antworten oben,
Sie können auch versuchen , diese .php Erweiterungen komplett aus der Datei zu entfernen und zu vermeiden Endlosschleife :
Dieser Code funktioniert in Root / .htaccess. Ändern Sie unbedingt die RewriteBase, wenn Sie diese in eine htaccess-Datei im Unterverzeichnis ablegen möchten.
Bearbeiten:
Ab Apache 2.4 können Sie auch das END-Flag verwenden, um Endlosschleifenfehler zu vermeiden. Das folgende Beispiel funktioniert genauso wie oben in Apache 2.4.
quelle
Der folgende Code funktioniert gut für mich:
quelle
Hier ist eine Methode, wenn Sie dies nur für eine bestimmte Datei tun möchten:
Ref: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
quelle
Nach dem Ändern der Parameter
AllowOverride
vonNone
zuAll
in/etc/apache2/apache2.conf
(Debian 8), nach dieser muss die .htaccess - Datei nur enthalten:Und es war genug, um die .php-Erweiterung vor Dateien zu verbergen
quelle
MultiViews
dies<a href="somepage.php">
Link</a>
zu<a href="somepage">
Link</a>
im Quellcode ändernVersuchen Sie dies
Der folgende Code wird definitiv funktionieren
quelle
Ich bin mir nicht sicher, warum die anderen Antworten bei mir nicht funktionierten, aber dieser Code, den ich gefunden habe, hat Folgendes getan:
Das ist alles, was in meinem htaccess steht und example.com/page zeigt example.com/page.php
quelle
So entfernen Sie die Erweiterung .php aus einer PHP-Datei, z. B. Ihre Website.com/about.php, zu Ihrer Website.com/about. Führen Sie die folgenden Schritte aus. Öffnen Sie die .htaccess-Datei (erstellen Sie eine neue, falls nicht vorhanden) im Stammverzeichnis Ihrer Website und fügen Sie den folgenden Code hinzu.
So entfernen Sie die Erweiterung .html aus einer HTML-Datei, z. B. Ihre Site.com/about.html, zu Ihrer Site.com/about. Führen Sie die folgenden Schritte aus.
Öffnen Sie die .htaccess-Datei (erstellen Sie eine neue, falls nicht vorhanden) im Stammverzeichnis Ihrer Website und fügen Sie den folgenden Code hinzu.
Referenz: So entfernen Sie die PHP-Erweiterung von der URL
quelle
Wenn Sie in PHP codieren und .php entfernen möchten, können Sie eine URL wie folgt haben:
http://yourdomain.com/blah -> was auf /blah.php verweist
Das ist alles was Sie brauchen:
quelle
Ich habe 100% funktionierendes Konzept für mich gefunden:
Verwenden Sie diesen Code im Stammverzeichnis Ihrer Website .htaccess-Datei wie folgt:
offline - wamp \ www \ YourWebDir
online - public_html /
quelle
RewriteRule
s mit dem TagL
nebeneinander haben.[L]
sagt,mod_rewrite
dass es die letzte Regel für die angegebene istRewriteCond
.Hier ist der Code, mit dem ich die
.php
Erweiterung vor dem Dateinamen ausgeblendet habe:Hinweis:
R=301
dient der permanenten Weiterleitung und wird für SEO-Zwecke empfohlen. Wenn Sie jedoch nur eine vorübergehende Weiterleitung wünschen, ersetzen Sie diese durch justR
quelle
Ich habe den folgenden Arbeitscode erhalten:
quelle
Wenn Ihre URL in PHP http://yourdomain.com/demo.php mag, dann kommt sie wie http://yourdomain.com/demo
Das ist alles was Sie brauchen:
Datei erstellen .htaccess
quelle
http://example.com/myfile
aber es hat nicht funktionierthttp://example.com/myfolder/
(Indexdatei). Können Sie mir helfen, dass es für die Indexdatei funktioniert?Versuchen
quelle