2016-08-01 8 views
0

Ich benutze bereits RewriteEngine und RewriteConditions, um den .php Teil aus dem Dateinamen zu entfernen.Wie automatisch den Dateinamen von der URL zu entfernen?

Allerdings besuchte ich diese Website vor kurzem, http://poorlydrawnlines.com/comic/tragedy/. Ich habe versucht, den tatsächlichen Dateinamen zu finden, der sich als index.php herausstellte. Als ich jedoch versuchte, zu http://poorlydrawnlines.com/comic/tragedy/index.php zu gehen, verkürzt die Site automatisch die URL zu http://poorlydrawnlines.com/comic/tragedy/. Wie wird dieses Verhalten erreicht?

Korrigiere ich auch, dass die ursprüngliche Adresse der Seite in index.php endet? Oder leitet mich die Seite einfach um? Wie erstelle ich das auf meinen eigenen Websites neu?

+0

, die durch genau die Mittel der URL erreicht man bereits Umschreiben Anspruch Sie verwenden. Wenn Sie das tun, sollte die Lösung für Sie offensichtlich sein. URL-Rewriting kann nicht nur eine eingehende Anfrage intern neu schreiben, sondern auch Ihren Browser umleiten, wie Sie im Beispiel sehen. – arkascha

+0

Können Sie mir ein Beispiel geben, wie es geht? Ich benutze den Code, den ich auf einer Website gefunden habe, aber ich verstehe noch nicht, wie genau die rewriteEngine funktioniert. –

+0

@arkascha auch, wird mir ein Apache-Buch helfen, diese Konzepte zu lernen? Sind diese in den gängigen Apache-Büchern enthalten, wie O'Reilys Apache Cookbook? –

Antwort

3

Da Sie Ihren ursprünglichen Code .htaccess nicht zur Verfügung gestellt haben, ist dies das Beste, was ich tun kann.

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 
1

Sie passen einfach Ihre RewriteCondition an, um in der angeforderten URL nach index.php zu suchen und sie zu entfernen, anstatt nur die Erweiterung .php zu entfernen.

EDITED Beispiel zu geben:

RewriteEngine On 
RewriteCond "%{REQUEST_URI}" "(.*)/index\.php" 
RewriteRule ".*" "%1/" [R=301,L] 

Der RewriteCond verwendet wird, um die Ordner/Pfadnamen zu erfassen und leitet dann RewriteRule, um es ohne die Dateinamen. Dies behält auch alle Abfragezeichenfolgenparameter bei.

+0

Oh .. das macht Sinn. Können Sie einen Beispielcode dafür bereitstellen? –

+0

Eine 'RewriteCondition' kann keine Aktion ausführen. Sie beziehen sich auf eine 'RewriteRule' ... – arkascha

+0

Korrekt, RewriteCondition kann die Aktion nicht ausführen, aber es kann den ursprünglichen Pfad erfassen, der dann in der RewriteRule verwendet werden kann. – jhilgeman

0

Zusätzlich Antwort auf @cmorrissey, dieses Skript wird auch den Trick tun, ohne mod_rewrite:

$lookup = 'index.php'; 
$parts = explode('?', $_SERVER['REQUEST_URI']); 
if(substr($parts[0], -(strlen($lookup))) == $lookup){ 
    header('location: ./'); 
    die(); 
}