2009-06-04 20 views
0

Ich habe eine Herausforderung mit Apache.Htaccess URL umschreiben Frage

In meiner .htaccess-Datei würde Ich mag Anfragen wie diese konvertieren:

url/Portfolio/filename.htm

zu:

url Dateiname

Irgendwelche Abnehmer? Danke für deine Zeit

+0

Bitte seien Sie etwas genauer. Was bedeutet "URL" in Ihrem Beispiel? Und ist das "Portfolio" festgelegt? – Gumbo

Antwort

0

So etwas sollte funktionieren, obwohl ich es nicht getestet habe.

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/URL 
RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L] 


</IfModule> 
<IfModule !mod_rewrite.c> 
    ErrorDocument 404 index.php 
</IfModule> 
+0

Alec, vielen Dank für die schnelle Antwort. Ich habe es ausprobiert und es scheint nicht zu funktionieren, also habe ich einen Regex-Tester benutzt, um zu sehen, was da oben los ist ... gibt es eine Chance für eine 'Delimiter-Kollision'? Danke D –

1

Sie haben mehrere Möglichkeiten, je nachdem, wie die URL für Besucher (und Suchmaschinen) angezeigt werden soll.

Wenn Sie möchten, dass die extern sichtbare URL url/portfolio/filename.htm bleibt, funktionierte Alecs Lösung, nachdem ich die beiden RewriteCond Zeilen entfernt hatte.

RewriteEngine On 

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L] 

Wenn andere Parameter in dem Query-String sein könnten und Sie wollen diejenigen erhalten, fügen Sie QSA zu den Optionen in Klammern am Ende der Regel.

Wenn man die Leute draußen wollen url?filename statt, um zu sehen, um die Regel zu ändern:

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [L,R] 

Gleiche Qualifikation über andere Abfrageparameter gilt.

Wenn das immer noch nicht hilft, schlage ich vor, dass Sie die Protokollierung umschreiben und in diesem Protokoll nach weiteren Hinweisen suchen. Posten Sie sie hier und jemand wird helfen. Sie müssen diesen Teil möglicherweise in httpd.conf setzen. Mein Apache mochte es nicht in .htaccess.

RewriteLog ...path... 
RewriteLogLevel 3 # you'll regret anything higher 
0

Dies sollte funktionieren:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^portfolio/(.+)\.htm$ index.php?$1 [NC,L] 

oder wenn Sie wollen, dass es sichtbar ändern:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^portfolio/(.+)\.htm$ /?$1 [R,NC,L] 

Die zweite wie example.com/?filename auf das aussehen würde Benutzer, während der erste wie example.com/portfolio/filename.htm aussehen würde.

Hoffnung, das hilft.