2014-02-28 175 views
0

我認爲(糾正我,如果我錯了),最好是把/放在大部分url的末尾。就像這樣:http://www.myweb/file/在url結尾處的斜槓

並沒有投入/在文件名末尾:http://www.myweb/name.html

我必須糾正在有大量的鏈接網站。有沒有辦法以最快的方式做到這一點?例如在像Dreamweaver這樣的程序中,我可以使用查找和替換。

第二種情況是很容易用Dreamweaver:
- 查找:html的/ 「
- 替換:html的」

但我怎麼能這樣說:
- 查找:所有鏈接那以一個目錄結束。像http://www.myweb/file
- 替換:相同的鏈接,但在結尾處有一個/。像http://www.myweb/file/

+0

您可以使用正則表達式並在url中搜索'.' – pes502

+0

編寫某種生成器來搜索模式並替換它們。我這樣做總是用來替換整個工作區中的模式。 – GuyT

+1

無法保證文件名包含'.'和/或目錄名不包含。除非您知道實際的文件系統結構,否則無法在URL中區分它們。 –

回答

1

您的方法可能工作,但它是基於所有文件都有文件擴展名的假設。

網址http://www.myweb/filehttp://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不存在於由第一個腳本提取的列表中。

任何基於文本的查找和替換都不會意識到鏈接是否實際上是文件。

+0

也許我沒有解釋得很清楚。請看我更新的問題。 – Nrc