2009-08-26 19 views
3

Ich könnte hier Hilfe verwenden. Ich verwende dies, um meine URL zu korrigieren, aber ich kann nicht herausfinden, wie ich die .php-Erweiterung entfernen kann. Die URL sieht wie folgt nun: http://mydomain.com/page.php/foo/123/bar/456Entfernen Sie PHP-Erweiterung mit PHP

function decode_URL_parameters() { 
    $path = @$_SERVER['PATH_INFO']; 
    $url_array=explode('/',$path); 

    array_shift($url_array); 

    while ($url_array) { 
     $_GET[$url_array[0]] = $url_array[1]; 
     array_shift($url_array); 
     array_shift($url_array); 
    } 
} 

Irgendwelche Ideen?

/Tobias

+0

Sie versuchen, was zu schaffen sind bekannt als "Pretty URLs", und sie wurden bereits auf SO diskutiert. [Diese Antwort] (http://stackoverflow.com/questions/128796/pretty-urls-for-search-pages/128882#128882) sollte haben, wonach Sie suchen. – s4y

+0

Sie können dies nicht mit PHP allein tun, müssen Sie in das Apache-Modul mod_rewrite graben. –

Antwort

5

Wenn Sie über Apache sind dient, werden Sie bei mod_rewrite suchen.

Mithilfe von mod_rewrite können Sie die Zuordnung von URLs zu den tatsächlichen Endpunkten Ihrer Anwendung ändern. Für Ihr Beispiel werden Sie so etwas wie dies wollen:

RewriteEngine on 
RewriteRule ^/?page/(.*)$ page.php/$1 [L] 

This page hat einige andere einfache Beispiele.

3

Sie haben wahrscheinlich Ihren Webserver so konfiguriert, dass php alle Anfragen nach Dateien mit der Erweiterung .php behandelt. Nehmen wir an, es ist ein Apache. Dann gibt es so etwas wie

AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt 

oder

<FilesMatch \.php$> 
    SetHandler application/x-httpd-php 
</FilesMatch> 

in einer der Konfigurationsdateien. Der zweite teilt dem Apache mit, dass alle Dateien, die mit der Maske .php $ übereinstimmen, von dem Modul/Handler behandelt werden sollen, der für den Typ application/x-httpd-php (php) registriert ist.
Sie müssen es jedoch nicht auf .php-Dateien beschränken. Sie können jede gewünschte Dateimaske verwenden. Oder eine andere Direktive wie z.B. <Directory>.
Wenn alle Dateien in einem bestimmten Verzeichnis (und vielleicht auch seine Unterverzeichnisse) sind PHP-Skripte, die Sie selbst mit

ForceType application/x-httpd-php 

und der Apache behandeln wird jede Datei als PHP-Skript eine .htaccess-Datei in diesem Verzeichnis. ForceType überschreibt alle vorherigen Handlereinstellungen.

2

Setzen Sie unter Apache eine .htaccess-Datei in das Verzeichnis, das die Datei Page.php enthält.

Wenn die page.php Dateien im Stammverzeichnis enthält (dh /page.php), dann fügen Sie einfach diese in der .htaccess:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /page.php?/$1 [L] 

Wenn jedoch enthält die page.php Dateien in können sagen /a_folder/another_folder/page.php

Dann müssen Sie diese in Ihre .htaccess setzen:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /a_folder/another_folder/page.php?/$1 [L] 

Und so weiter.

Was ist das, es entfernt einfach page.php von der URL. Also in Ihrem Fall:

Statt: http://mydomain.com/page.php/foo/123/bar/456 können Sie verwenden: htp: //mydomain.com/foo/123/bar/456

Haben Sie Spaß.

0

Vielen Dank für alle Antworten, aber wenn ich mod_rewrite benutze, dann musste ich jedes Mal neue Regeln (und viele) machen, wenn ich eine neue Seite erstelle. Und es gibt eine Menge von ihnen :)

Vielleicht, wenn ich alle Urls meine index.php mit .htaccess umleiten und dann meine URL dort beheben, wie Wordpress:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress