您的方法可能工作,但它是基於所有文件都有文件擴展名的假設。
網址http://www.myweb/file
和http://www.myweb/file/
之間存在明顯差異,因爲後者可能會解析爲http://www.myweb/file/index.php
或其他網站服務器中配置的默認設置。該URL也可以引用完全有效的文件,該文件不包含文件擴展名,例如它是否爲REST端點。
所以你是正確的,因爲如果你指的是一個目錄,你應該明確地添加一個「/」,例如,如果你期望Web服務器查找正確的索引頁面來做出響應,或者做一個目錄列表。
要替換不正確的URL,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=".*"
與href=".*/"
只有當最終取代它們的URL不存在於由第一個腳本提取的列表中。
任何基於文本的查找和替換都不會意識到鏈接是否實際上是文件。
您可以使用正則表達式並在url中搜索'.' – pes502
編寫某種生成器來搜索模式並替換它們。我這樣做總是用來替換整個工作區中的模式。 – GuyT
無法保證文件名包含'.'和/或目錄名不包含。除非您知道實際的文件系統結構,否則無法在URL中區分它們。 –