2016-09-11 6 views
1

Ich arbeite mit einer Website von Drittanbietern, die die Wave-Datei nach Name, nicht nach URL speichert. Ich habe viele Wave-Dateien in meinem System mit dem gleichen Namen, aber in verschiedenen Verzeichnissen, aber die Third-Party-Site spielt die falsche Datei ab, wenn sie eine Datei mit demselben Namen aber in einem anderen Verzeichnis anfordert.Rewrite Zeichenfolge als Pfadtrennzeichen in Apache Rewrite-Regel

Also dachte ich daran, den Schrägstrich ('/') von URL zu entfernen und es mit der Zeichenfolge _dir_separator_ zu kombinieren, um die Wave-Datei über das System einzigartig zu machen.

Wie kann ich die URL neu schreiben, so dass alle Vorkommen von _dir_separator_ intern neu geschrieben werden, um Schrägstrich?

Für zB., Für diese Datei anfordert http://mysite/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav

soll dies einen Pick http://mysite/media/voice_scripts/script_en.wav

Bitte beachten Sie Verzeichnisstruktur ist von mehreren Ebenen tief so festgelegte Anzahl von Mustern Umschreiben nicht funktionieren würde.

Edit: Ich habe meine Meinung geändert und möchte Bindestrich (-) anstelle von _dir_sepator_ string verwenden. Wichtig, ich brauche das, um neu zu schreiben.

RewriteRule ^([^-]*)-([^-]*-.*) $1/$2 [N] 
    RewriteRule ^([^-]*)-([^-]*)$ $1/$2 [L] 

Antwort

0

Wenn der Host-Mod-Rewrite ermöglicht hat, und die AllowOverride gesetzt hat, Ihnen die Möglichkeit zu bieten .htaccess-Dateien zu installieren, können Sie die folgende verwenden:

RewriteEngine On 

RewriteCond %{REQUEST_URI} _dir_separator_ [NC] 
RewriteRule ^(.*)_dir_separator_(.+)$ /$1/$2 [R,L] 

Testen Sie es mit curl auf mein System gibt:

$ curl -LI http://localhost/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media_dir_separator_voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media/voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 404 Not Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Content-Type: text/html; charset=iso-8859-1 

Für die Verwendung mit dem Bindestrich (-) chara cter:

RewriteRule ^(.*)-(.+)$ /$1/$2 [N] 
+0

Ich änderte meine Meinung. Anstelle von _dir_separate_ bevorzuge ich einen einfachen Bindestrich (-). Ich werde sicher sein, dass keine der Dateien in ihnen gesäumt ist. Ich habe das versucht RewriteRule^([^ -] *) - ([^ -] * -. *) $ 1/$ 2 [N] RewriteRule^([^ -] *) - ([^ -] *) $ $ 1/$ 2 [L] Aber es scheint nicht zu funktionieren. Ich brauche die Neuschreiblösung, um ohne Redirect zu arbeiten. – SenG

+0

@SenG Setzen Sie nicht das "L" -Flag. – hjpotter92

+0

Ich habe Ihr exaktes Snippet in meiner vhost-Datei verwendet, es wird immer noch weitergeleitet. Ich kann die neue URL im Browser sehen. – SenG