1

我正在与第三方网站合作,该网站按名称而不是 url 缓存 wave 文件。我的系统中有很多同名但在不同目录中的波形文件,但是第三方站点在请求同名但在不同目录中的文件时播放了错误的文件。

因此,我想从 url 中删除斜杠 ('/') 并将其与字符串_dir_separator_结合使用,以使 wave 文件在整个系统中唯一。

如何重写 url,以便所有出现的 _dir_separator_ 在内部重写为斜线?

例如,请求此文件http://mysite/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav

应该选这个http://mysite/media/voice_scripts/script_en.wav

请注意,目录结构具有多级深度,因此无法重写固定数量的模式。

编辑:我改变了主意,希望使用连字符(-)而不是 _dir_sepator_ 字符串。重要的是,我需要它在不重写的情况下工作。

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

1 回答 1

0

如果主机启用了 mod-rewrite,并设置了AllowOverride为您提供设置 htaccess 文件的能力,您可以使用以下内容:

RewriteEngine On

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

在我的系统上用 curl 测试它会给出:

$ 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

对于连字符 ( -) 字符的用法:

RewriteRule ^(.*)-(.+)$ /$1/$2 [N]
于 2016-09-11T06:00:02.823 回答