在网址末尾斜杠

时间:2014-02-28 15:12:59

标签: url replace

我认为(如果我错了,请纠正我)最好在大多数网址的末尾添加一个/。像这样:http://www.myweb/file/

并且不要将/放在文件名的末尾:http://www.myweb/name.html

我必须在一个有很多链接的网站上纠正这个问题。有没有办法可以快速完成。例如,在像Dreamweaver这样的程序中,我可以使用find和replace。

使用Dreamweaver第二种情况非常简单:
- 查找:.html /“
- 替换:.html“

但我怎么能这样说:
- 查找:以目录结尾的所有链接。像http://www.myweb/file一样 - 替换:相同的链接,但最后有一个/。像http://www.myweb/file/

一样

1 个答案:

答案 0 :(得分:1)

您的方法可能有效,但它基于所有文件都有文件扩展名的假设。

网址http://www.myweb/filehttp://www.myweb/file/之间存在明显差异,因为后者可以解析为http://www.myweb/file/index.php,或者在您的网络服务器中配置的默认设置中的任何其他网址。该URL还可以引用一个完全有效的文件,该文件不包含文件扩展名,例如它是否为REST端点。

因此,如果您要引用目录,则应明确添加“/”,这是正确的,例如,如果您希望Web服务器查找正确的索引页面以进行响应或执行目录列表。

要替换错误的网址,regular expressions是您的朋友。

要查找所有具有错误“/”的文件,您可以使用/\.(html|php|jpg|png)\//,根据需要在该管道分隔列表中添加尽可能多的不同文件扩展名。然后,您可以将其替换为.$1.\1,具体取决于您的工具。

使用Perl执行此操作的示例如下:

perl -pi -e 's/\.(html|php|jpg|png)\//.\1/g' theFileYouWantToCheck.html

(如果你使用的是基于Linux的系统)你可以使用find很好地自动化它:

find path/to/html/root -type f -name "*.html* | xargs perl -pi -e 's/\.(html|php|jpg|png)\//.\1/g'

将找到目录中的所有html文件并执行内联查找和替换。假设您正在使用版本控制,那么很容易看到它应用的更改:)

<强>更新 解决向目录添加斜杠的问题并非易事。我采取的方法:

  • 编写脚本以在本地递归您的网站结构,制作所有文件的列表
  • 解析HTML文件以提取所有href=".*",并仅在第一个脚本提取的列表中不存在URL末尾时将其替换为href=".*/"

任何基于文本的查找和替换都不会知道链接是否实际上是文件。