簡體   English   中英

瀏覽器不會將包含文件替換為其包含文件

[英]Browser does not replace an include file by its including file

我絕對是JS的初學者。

1)我想做的是:

我的網頁由一個index.php組成,它對於目錄的所有文件和一個content.inc集合都是相同的,例如:index.php?open = content.inc。 這是由index.php中的PHP代碼段完成的,並且效果很好。 但是,Google會為所有content.inc文件建立索引。 然后,用戶的瀏覽器將顯示content.inc,而不顯示框架index.php。 我要避免這種情況。 因此,我在每個content.inc的開頭添加了一個適度的腳本(一旦運行,它將轉換為函數),以告訴瀏覽器與其顯示content.inc,還應該顯示index.php?open = content。公司

2)我無法解決的解決方案:

var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
if (filename.indexOf("index.php") = -1)
    { var frame_name = "index.php?open="+filename;
        window.location.replace(frame_name);
     };

瀏覽器(Firefox 60)忽略了這一點; 它顯示content.inc。 (我也有此腳本的版本,這些版本會使瀏覽器陷入無盡的循環。)

怎么了 請幫忙!

PS:請放心,我已經對這個問題進行了廣泛的網絡搜索,發現很多關於location.replace的投訴頁面陷入無限循環; 但沒有一個符合我的情況。 但是,我非常感謝您提供有用的鏈接作為答案。

對於初學者,此行有一個錯誤:

if (filename.indexOf("index.php") = -1)

這是一個分配,並且將始終為true ,您需要使用===== (應該更高效)。

內test線在您的測試用例上(請參閱JP de la Torre答案)。 為了改進,下面是一個片段,演示如何使用正則表達式分析網址:

 function redirect(url) { if(url && url.indexOf('.inc') >= 0) { return url.replace(/\\/(\\w+)\\.inc/, '/index.php?open=$1'); } return url; } let urls = [ window.location.href, 'http://google.fr', 'http://example.com/index.php?open=wazaa', 'http://example.com/wazza.inc' ]; urls.forEach(url => { console.log(url, ' => ', redirect(url)); }); 

regexp將捕獲/和.inc之間的任何文本。 然后,您可以將其用作$ 1的替換值。

並應用於您的案例,您只需要:

 if(window.location.href.indexOf('.inc') >= 0) {
    window.location.href = window.location.href.replace(/\/(\w+)\.inc/, '/index.php?open=$1');
  }

如果啟用了mod_rewrite,您還可以使用.htaccess服務器端在index.php上重定向對.inc文件的請求。

Bertrand在上面的第二個代碼段中提出的解決包含單獨調用的INC文件的方法。 它以(正確)為前提,在替換中省略了inc擴展名。

正如我在上面報道的那樣,如果Firefox直接打開PHP文件(即不涉及本地主機(帶有php模塊)),則可能會陷入無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM