使用 Apache 和 mod_rewrite 我可以将复杂的请求重写为简单的文件名,例如:
RewriteRule ^shortcut/(.*)$ /long/way/around/$1
这可以反过来吗?我希望将一个简单的请求重写为未知文件,但我可以通过文件名前缀的唯一 ID 号来识别应提供哪个文件。我希望 Apache 使用正则表达式“猜测”根据 ID 提供哪个文件。
例如:
GET /img/29281.jpg
Directory of /img/:
...
29280-filename-here.jpg
29281-other-filename-here.jpg <-- Apache should serve this one
29282-more-files-here.jpg
...
因此,正则表达式重写可能是:
^(\d+)\.jpg$ --> ^$1\-[a-zA-Z0-9-_]+.jpg$
如何将其集成到 Apache 中(如果可能的话)?
非常感谢您的任何建议。
附:在这种情况下,无法将所有文件名重命名为简单的 ID 号。
我认为 apache 方式之一是使用 mod-rewrite 与重写映射 http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap指令,并使用:prg重写映射的映射。
这将在 apache 启动时加载一个简单的程序(可能是文档中建议的 perl 程序,PHP 程序可能会出现更多内存泄漏和性能问题,恕我直言)。该程序必须猜测文件名的最后部分。
您可以找到此类程序的一些示例这里(PHP) http://www.wellho.net/resources/ex.php4?item=a603/andy, 那里(C) http://www.issociate.de/board/post/495527/RewriteMap_PRG_By_Example_Using_C.html, 这是一个 Perl 基本的 https://serverfault.com/questions/217740/rewrite-map-prg-never-finishes.
我的大脑中没有足够的 perl 功能来获取使用扩展名和 int 标识符提取真实文件名的 perl 方法,但这应该很简单且简短(这对于 PRG rewriteMap 很重要)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)