Zur Navigation

Zugriff auf Datei ohne php-Endung

1 christa

Hallo Forum

bin neu hier und komme mit der .htaccess nicht zu Gange. Vielleicht kann mir jemand weiter helfen. Das Problem ist folgendes. Die php-Seiten liegen auf einem Apache und können nur in folgender Form aufgerufen werden:

xyz.tdl/verzeichnis/test.php/kategorie

Viel lieber möchte ich den Aufruf aber so machen können:

xyz.tdl/verzeichnis/test/kategorie

1) Wie müsste die .htaccess aussehen, damit generell alle php-Seiten ohne die Extension aufgerufen werden können?

2) welche Einstellungen auf dem php-Server müsste man machen, damit man sich nicht der .htaccess bedienen muss.

Auf einem Server funktioniert die Umsetzung nämlich ohne .htaccess, auf dem anderen aber nicht. Also muss es php-Einstellungen geben womit man das bewirken kann.

Für Eure Hilfe wäre ich sehr dankbar.

lG
Christa

07.12.2012 17:21

2 Jörg Kruse

Die php-Seiten liegen auf einem Apache und können nur in folgender Form aufgerufen werden:

xyz.tdl/verzeichnis/test.php/kategorie

Die URLs sind dann aber schon rewritet?

Viel lieber möchte ich den Aufruf aber so machen können:

xyz.tdl/verzeichnis/test/kategorie

1) Wie müsste die .htaccess aussehen, damit generell alle php-Seiten ohne die Extension aufgerufen werden können?

Dazu muss man wissen, wie die originalen dynamischen URLs ausschauen. Was steht denn bislang in der .htaccess Datei?

Auf einem Server funktioniert die Umsetzung nämlich ohne .htaccess, auf dem anderen aber nicht. Also muss es php-Einstellungen geben womit man das bewirken kann.

Mit PHP alleine geht das nicht, es sei denn, die Verzeichnisse sind alle real und enthalten eine index.php. Aber selbst da könnte dann nichts mehr rewritet werden. Der Webserver muss an irgendeiner Stelle die statischen URLs auf eine PHP-Datei umschreiben, erst danach könnte PHP dann die statischen URLs interpretieren. Das Umschreiben kann in einer .htaccess Datei geschehen oder in einer Konfigurationsdatei des Webservers / des betreffenden VirtualHosts. Auf letztere hat man aber nur Zugriff bei einem Virtual oder Root Server.

07.12.2012 18:40 | geändert: 07.12.2012 18:42

3 christa

Zitat von Jörg
Die php-Seiten liegen auf einem Apache und können nur in folgender Form aufgerufen werden:

xyz.tdl/verzeichnis/test.php/kategorie

Die URLs sind dann aber schon rewritet?

Viel lieber möchte ich den Aufruf aber so machen können:

xyz.tdl/verzeichnis/test/kategorie

1) Wie müsste die .htaccess aussehen, damit generell alle php-Seiten ohne die Extension aufgerufen werden können?

Dazu muss man wissen, wie die originalen dynamischen URLs ausschauen. Was steht denn bislang in der .htaccess Datei?

Auf einem Server funktioniert die Umsetzung nämlich ohne .htaccess, auf dem anderen aber nicht. Also muss es php-Einstellungen geben womit man das bewirken kann.

Mit PHP alleine geht das nicht, es sei denn, die Verzeichnisse sind alle real und enthalten eine index.php. Aber selbst da könnte dann nichts mehr rewritet werden. Der Webserver muss an irgendeiner Stelle die statischen URLs auf eine PHP-Datei umschreiben, erst danach könnte PHP dann die statischen URLs interpretieren. Das Umschreiben kann in einer .htaccess Datei geschehen oder in einer Konfigurationsdatei des Webservers / des betreffenden VirtualHosts. Auf letztere hat man aber nur Zugriff bei einem Virtual oder Root Server.

hallo Jörg

Besten Dank für die Beantwortung der Fragen. Wie schon berichtet existiert auf beiden Servern keine .htaccess

Server-Variante:

Auf Server 1 habe ich keinen Zugriff, eine .htaccess existiert nicht. Der Server erledigt das Umschreiben der dyn. url. offenbar selbstständig, dh. er ist dafür offenbar richtig eingestellt.

Auf Server 2 habe ich Root-Zugang, weiß aber nicht, wo man das einstellen muss.

.htaccess-Variante

wie müsste die .htaccess lauten um alle dyn. Seiten die im real existierenden Verzeichnis "verz" liegen, umzuschreiben?

von: xyz.tld/verz/test.php/1/2
in: xyz.tld/verz/test/1/2

wenn die test.php zB. wie folgt aussehen würde

<?PHP

print $self=$_SERVER['REQUEST_URI'];

$p=getParamter($self);

function getParamter($self) {
$t=explode("/",$self);
return $t;
}
?>

<p>Parameter:<?PHP foreach($p as $item) {?><p><?PHP echo $item ?></p><?PHP } ?></p>

aktueller Zustand:

Server 1 ohne .htaccess, akzeptiert beide url-Varianten
xyz.tld/verz/test.php/1/2
xyz.tld/verz/test/1/2

Server 2 ohne .htaccess, akzeptiert aber nur
xyz.tld/verz/test.php/1/2

Hoffe mich verständlich ausgedrückt zu haben

Grüße
Christa



08.12.2012 15:35

4 Jörg Kruse

Besten Dank für die Beantwortung der Fragen. Wie schon berichtet existiert auf beiden Servern keine .htaccess

Nur um sicher zu gehen:

Dateien mit einem Punkt am Anfang werden in Unix / Linux von manchen Programmen erst angezeigt, wenn man eine entsprechende Option aktiviert (z.B. "versteckte Dateien anzeigen")

Auf Server 1 habe ich keinen Zugriff, eine .htaccess existiert nicht. Der Server erledigt das Umschreiben der dyn. url. offenbar selbstständig, dh. er ist dafür offenbar richtig eingestellt.

Das ist merkwürdig, da sich hier zuallererst die Frage stellt, was denn "richtig" ist, d.h. auf welche Datei der Server Anfragen rewriten soll. Es könnte aber vielleicht sein, dass mod_speling aktiviert ist, was dazu führt, dass der Webserver eine ähnlich geschriebene Datei ausliefert, wenn die angeforderte nicht existiert. Das ist allerdings eine sehr unsichere Sache, auf die ich mich nicht verlassen würde.

PHP kommt erst am Ende zum Zuge, wenn der Server eine virtuelle URL auf eine PHP-Datei gemappt hat. Wenn dies nicht geschieht, gibt's nur ein 404 "Not Found"

wie müsste die .htaccess lauten um alle dyn. Seiten die im real existierenden Verzeichnis "verz" liegen, umzuschreiben?

von: xyz.tld/verz/test.php/1/2
in: xyz.tld/verz/test/1/2

Also xyz.tld/verz/test.php ist dann die real existierende PHP-Datei? auf diese muss die URL gemappt werden

In der .htaccess im Verzeichnis /verz würde ich es folgendermaßen probieren:

RewriteEngine on

RewriteRule ^test/ test.php [L]

Voraussetzung ist, dass mod_rewrite zur Verfügung steht

08.12.2012 17:21

5 christa

Zitat von Jörg
Besten Dank für die Beantwortung der Fragen. Wie schon berichtet existiert auf beiden Servern keine .htaccess

Nur um sicher zu gehen:

Dateien mit einem Punkt am Anfang werden in Unix / Linux von manchen Programmen erst angezeigt, wenn man eine entsprechende Option aktiviert (z.B. "versteckte Dateien anzeigen")

Auf Server 1 habe ich keinen Zugriff, eine .htaccess existiert nicht. Der Server erledigt das Umschreiben der dyn. url. offenbar selbstständig, dh. er ist dafür offenbar richtig eingestellt.

Das ist merkwürdig, da sich hier zuallererst die Frage stellt, was denn "richtig" ist, d.h. auf welche Datei der Server Anfragen rewriten soll. Es könnte aber vielleicht sein, dass mod_speling aktiviert ist, was dazu führt, dass der Webserver eine ähnlich geschriebene Datei ausliefert, wenn die angeforderte nicht existiert. Das ist allerdings eine sehr unsichere Sache, auf die ich mich nicht verlassen würde.

PHP kommt erst am Ende zum Zuge, wenn der Server eine virtuelle URL auf eine PHP-Datei gemappt hat. Wenn dies nicht geschieht, gibt's nur ein 404 "Not Found"

wie müsste die .htaccess lauten um alle dyn. Seiten die im real existierenden Verzeichnis "verz" liegen, umzuschreiben?

von: xyz.tld/verz/test.php/1/2
in: xyz.tld/verz/test/1/2

Also xyz.tld/verz/test.php ist dann die real existierende PHP-Datei? auf diese muss die URL gemappt werden

In der .htaccess im Verzeichnis /verz würde ich es folgendermaßen probieren:

RewriteEngine on

RewriteRule ^test/ test.php [L]

Voraussetzung ist, dass mod_rewrite zur Verfügung steht

1) prima xyz.tld/verz/test/1/2/ geht, leider aber nicht, wenn am Schluss kein "/" steht also wie erwünscht xyz.tld/verz/test/1/2 das geht noch nicht.
Fehlermeldung:

Multiple Choices
The document name you requested (/verz/test/1/2) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/verz/test.php/1/2 (common basename)

2) Und wie sieht der rewrite allgemein aus, dh, für alle real existierenden php Dateien im Verzeichnis "verz"?

Danke


08.12.2012 20:20

6 Jörg Kruse

Multiple Choices
The document name you requested (/verz/test/1/2) could not be found on this server. However, we found documents with names similar to the one you requested.
Available documents:

/verz/test.php/1/2 (common basename)

Gibt es /verz/test.php/1/2 als reale Datei? wenn nicht, funkt der Webserver vorher irgendwo schon dazwischen.

2) Und wie sieht der rewrite allgemein aus, dh, für alle real existierenden php Dateien im Verzeichnis "verz"?

Wenn der String "test" variabel ist:

RewriteEngine on

RewriteRule ^([^/]+)/ $1.php [L]

08.12.2012 21:07

7 christa

Gibt es /verz/test.php/1/2 als reale Datei? wenn nicht, funkt der Webserver vorher irgendwo schon dazwischen.

test.php ist eine reale Datei
/1/2 sind virtuelle Dateien

RewriteRule ^([^/]+)/ $1.php [L]

mit dieser Rule werden einige urls in der Adresszeile richtig umgesetzt, der Inhalt aber bleibt immer der gleiche. Das Ganze funktioniert so nicht.

Server 1 auf den ich keinen Rootzugriff habe, setzt ohne htaccess alles richtig um. Das Problem liegt dann wohl eher an der Konfiguration des php-Servers. Gibt es dort irgend etwas was man aktivieren muss damit diese Umwandlung richtig erfolgt?

09.12.2012 08:17

8 Jörg Kruse

test.php ist eine reale Datei
/1/2 sind virtuelle Dateien

Dann muss als erstes geklärt werden, wo und wie die URLs auf diese Weise umgeschrieben werden. Wenn es keine .htaccess Dateien gibt, wird dies vermutlich in einer Konfigurationsdatei des Apache festgelegt, vornehmlich in der Konfiguration des betreffenden VirtualHosts.

Das Problem liegt dann wohl eher an der Konfiguration des php-Servers.

Was verstehst du unter einem "php-Server"?

09.12.2012 08:55

9 christa

Dann muss als erstes geklärt werden, wo und wie die URLs auf diese Weise umgeschrieben werden. Wenn es keine .htaccess Dateien gibt, wird dies vermutlich in einer Konfigurationsdatei des Apache festgelegt, vornehmlich in der Konfiguration des betreffenden VirtualHosts.

Das ist ja gernau die Frage die mir niemand schlüssig beantwortet. Es handelt sich um einen großen Hoster der vornehmlich schweigt .

Die Scripte die auf dem Server 1 problemlos laufen, müssen wohl für meinem Server angepasst werden, so dass sie ganz normale dyn. urls ausgeben. Via htaccess können dann daraus, falls erwünscht, statische urls generiert werden. Melde mich, wenn ich soweit bin.

schon mal besten Dank für Deine Hilfe

10.12.2012 07:15

10 christa

Ich möchte noch folgenden Versuch machen:

wie lässt sich per htaccess rewrite die url "xyz.tdl/verz/test/1/2" umzuschreiben in "xyz.tdl/verz/test.php/1/2" ? Aber möglichst ganz allgemein gehalten, was auf xyz.tdl/verz/ folgt in *.php umwandeln und den Rest so stehen lassen wie er ist (/1/2...)

so gemeint:
xyz.tdl/verz/test/1/2 -> xyz.tdl/verz/test.php/1/2
xyz.tdl/verz/beispiel/1/2 -> xyz.tdl/verz/beispiel.php/1/2
xyz.tdl/verz/datei/1/2 -> xyz.tdl/verz/datei.php/1/2

im voraus besten Dank







12.12.2012 23:05