我正在尝试创建一个 php 应用程序的静态镜像(特别是旧的 php Gallery 安装)。该应用程序生成 URL,例如:
view_album.php?set_albumName=MyAlbum
Run Code Online (Sandbox Code Playgroud)
wget
将这些直接下载到名称相同的文件中,并带有问号。为了不破坏入站链接,我想保留这些名称。但我如何为他们服务?我遇到了两个问题:
网络服务器(正确地)尝试查找“view_album.php”,并将查询参数传递给它,而不是查找带有问号的文件。如何告诉网络服务器查找其中带有问号的文件?重命名文件是不可取的,因为它会破坏入站链接。我不能告诉入站链接器对他们的 URL 进行 %-encode。
这些文件不以 HTML 结尾,因此大多数网络服务器不会发送 html 内容类型标头。我应该寻找哪些配置参数来告诉它为目录中的所有文件强制使用“text/html”内容类型或匹配特定模式?
我最终使用的是 lighttpd,但是如果您知道什么样的配置可以使用 apache/nginx 获得所需的结果,我也很想听听。
wget 将这些直接下载到名称相同的文件中,并带有问号。
您可以使用 禁用该行为--restrict-file-names=ascii,windows
,这可以直接在 wget 上解决您的问题,而无需花哨的服务器配置。
我认为你可以在 Apache 中使用mod_rewrite
来做到这一点。理想情况下,如果您告诉mod_rewrite
执行看似无用的重写,您可以欺骗它认为它应该提供名称包含查询字符串的文件。将类似的内容放入您的服务器配置中(不幸的是,不是在一个.htaccess
或一个<Directory>
块中)
RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1?%1
Run Code Online (Sandbox Code Playgroud)
我不知道这会对带有多个问号的 URL 产生什么影响。我认为它还会在没有查询字符串的 URL 上附加一个问号。您可以将第一个正则表达式更改为(.+)
,但随后它会使用空查询字符串从 URL 中删除问号。
如果这不起作用,您可以将文件重命名为不带问号的名称(例如将它们全部更改为 %s 或其他名称)并使用:
RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1\%%1
Run Code Online (Sandbox Code Playgroud)
我不知道这是如何处理 PATH_INFO 的。如果 Gallery 使用它,您可能需要添加类似的内容
RewriteCond %{PATH_INFO} (.*)
RewriteRule ^(.*) /path/to/webdir/$1/%1
Run Code Online (Sandbox Code Playgroud)
(但是,如果 Gallery 同时使用“ http://.../index.php ”和“ http://.../index.php/foobar ”,就会发生冲突,因为您无法拥有索引文件系统上的 .php 既是文件又是目录。您可以通过进行更多名称修改来解决这个问题。)
当我们投入一堆 mod_rewrite 时,不妨使用它来设置 MIME 类型:
RewriteRule \.php - [T=text/html]
Run Code Online (Sandbox Code Playgroud)
或者
RewriteCond %{REQUEST_FILENAME} \.jpg$
RewriteRule ^ - [T=image/jpeg]
Run Code Online (Sandbox Code Playgroud)
或类似的东西。(请注意,如果相册或照片名称包含“.php”等,第一个将如何破坏)
让我们知道结果如何!
归档时间: |
|
查看次数: |
3867 次 |
最近记录: |