Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“Apache别名”;“最佳猜测”;文件名_Apache_Mod Rewrite - Fatal编程技术网

“Apache别名”;“最佳猜测”;文件名

“Apache别名”;“最佳猜测”;文件名,apache,mod-rewrite,Apache,Mod Rewrite,使用Apache和mod_rewrite,我可以将复杂的请求重写为简单的文件名,例如: RewriteRule ^shortcut/(.*)$ /long/way/around/$1 这能反过来吗?我希望一个简单的请求被重写为一个未知的文件,但我可以确定哪个文件应该由一个唯一的ID号作为前缀提供给它的文件名。我希望Apache使用正则表达式根据ID“猜测”要为哪个文件提供服务 例如: GET /img/29281.jpg Directory of /img/: ... 29280-filen

使用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
...
如何将其集成到Apache中(如果可能的话)

非常感谢你的建议


另外,在这种情况下,将所有文件名重命名为简单ID号不是一个选项

您可以使用PHP脚本作为404页面的错误文档。
这个脚本将找到所需的文件,并向所需的文件发送重定向。

我认为apache的一种方法是使用mod rewrite命令,并使用rewritemap的:prg映射

这将在apache启动时加载一个简单的程序(可能是文档中建议的perl程序,PHP程序可能会遇到更多的内存泄漏和性能问题,IMHO)。这个程序将不得不做文件名猜测的最后一部分

您可以找到一些此类程序的示例


我的大脑中没有足够的perl功能来获取提取实际文件名的perl方法(使用扩展名和int标识符),但这应该是简单和简短的(这对于PRG重写图很重要)。

任何有经验的用户:您觉得这个问题最好放在另一个站点上(想到stackoverflow)吗?它相当繁重,可能存在于那里?如果是这样的话,正确跨越帖子的步骤是什么?@省略号-我同意StackOverflow是这个问题的最佳目的地,我现在把它移到那里;将来,请使用“flag”+“needs-moderator attention”控件加快对您的请求的关注。我认为最好的策略是将
^(\d+)\.jpg$
重定向到脚本(例如PHP),并在那里实现“best guess”。听起来Apache没有这种内置的,所以这看起来是最有力的方法;尽管Creadiff的404解决方案是一个很好的解决方案。
^(\d+)\.jpg$   -->   ^$1\-[a-zA-Z0-9-_]+.jpg$