2015-03-13 56 views
-1

在我的.htaccess文件中,我有一個用於靜態URL的RewriteRule,它可以正確轉換爲動態URL。但是,只有當我將R標誌附加到RewriteRule時纔會處理源代碼;如果沒有R標誌,源代碼會被傳送到瀏覽器,但它不會被渲染,即我得到的只是一個白色的屏幕,但「查看源代碼」顯示正確的代碼實際上已傳送到瀏覽器。但是,代碼中的頁面顯示是在自執行的匿名JQUERY函數中完成的。看起來,雖然RewriteRule允許將代碼發送到瀏覽器,但自執行的JQUERY函數並不會執行。自執行匿名函數能否與flummox MOD_REWRITE衝突?

對於MOD_REWRITE,是否應該使用特定的RewriteRule標誌來調用那些依賴於這樣的例程的代碼,這些標誌不是立即顯而易見的?該代碼可以在這裏看到:

https://home.comcast.net/~tom.brodhead/problem.txt

自調用匿名函數開始於行84

的任何建議非常感謝, 湯姆

這裏有一個重寫規則:

^g([0-9-]+)/w([0-9-]+)/?$ /gallery.php?gallery_id=$1#artwork.php?artwork_id=$2 [NE,NC,L] 
+0

你可以顯示出正確的重寫和有效的重寫嗎? – jfriend00 2015-03-13 07:38:22

+0

這可能有助於解釋:http://www.webmasterworld.com/forum92/1017.htm – jfriend00 2015-03-13 07:41:40

+0

如果我把這個代碼放在X.HTM中並直接轉到它,像這樣:mysite/x.htm然後執行。然而,我的重寫規則甚至是這樣的:RewriteRule^g $ /x.htm [NC,L]並且我這樣執行:mysite/g然後代碼被提供給瀏覽器,但它不執行。但是,如果我爲重寫規則添加R標誌,如下所示:^ g $ /x.htm [NC,L,R],則代碼將被提供給瀏覽器,並且頁面被柵格化,但是X.HTM會顯示在URL欄中。我相信它與自我調用匿名函數有關。有什麼想法嗎? – Tom 2015-03-13 18:28:46

回答

0

使用[R]標誌,瀏覽器將被物理重定向到不同的URL然後瀏覽器會從該新URL中提取內容。該第二個URL成爲在瀏覽器中顯示的URL,並且是該頁面的所有相對URL評估的基本URL。

如果沒有[R]標誌,原始URL的內容只是被重寫爲具有不同的內容,並且瀏覽器中的URL保持原來請求的內容(在這種情況下瀏覽器不知道重寫)。瀏覽器中的所有相對URL均相對於該原始URL進行評估。

你還沒有分享過這個RewriteRule正在捕捉的原始URL,但是如果它與/x.htm不同,那麼這將會產生巨大的差異。

在這裏使用相對路徑,並要加載腳本:

<script type="text/javascript" src="./javascript/jquery.min.js"></script> 
<script type="text/javascript" src="./javascript/jquery.ba-bbq.min.js"></script> 
<script type="text/javascript" src="./javascript/jquery.carouFredSel-6.2.1-packed.js"></script> 

所以,如果你更改基本URL的位置,這些腳本可以很容易地啓動或停止正常加載。

由於您已經透露了有關這裏使用的實際URL的細節,瀏覽器中顯示的實際錯誤等等,這僅僅是一個理論。但是,如果這個理論是正確的,那麼你可以通過幾種不同的方式解決這個問題。最簡單的方法就是停止使用相對路徑,這取決於基本URL的位置。您不需要將域放入路徑中,但可以在根/path/myscript.js處啓動它們,以使它們獨立於基本URL路徑。

其他解決方案可能涉及在HTML文件中設置基本href,以控制相對URL獨立於頁面URL進行評估。

或者您可以在請求的路徑上爲丟失的腳本文件設置重寫URL。

如果發生這種情況,當頁面無法正常工作時,您還應該能夠在瀏覽器的錯誤控制檯中看到腳本加載錯誤。

而且,Chrome調試器中的網絡選項卡應該精確顯示哪些URL請求沒有正確加載,並且確切地顯示了請求的URL。


僅供參考,你可能不希望使用[R]標誌的正常生產頁面URL,因爲它是客戶端和服務器之間的往返額外增加了它的低效率。


我也爲你想有針對性的^g$重寫規則完成什麼有點困惑。如果你也可以解釋,那麼在改變重寫規則時可能會有其他解決方案。

+0

1)這是我正在修改的其他人編寫的代碼。 2)$ g ^只是最簡單的重寫的一個例子......我的觀點是即使重寫單個字母也不起作用,即它與參數沒有傳遞給重寫無關。 3)我直接進入有問題的頁面時,通過使用[R]標誌和重寫提供的代碼* [*]沒有[R]標誌來重寫服務的代碼,每次都是一樣的。 4)當我從一個專用的通用文件(X.HTML)加載該代碼時,它執行得很好。 – Tom 2015-03-14 00:55:24

+0

5)頁面的頭部設置爲不可見,直到它被自執行的Jquery函數處理。 6)當查詢自我執行功能中,除了造型信息和其他東西外,頁面*顯示內容不可見的標題指令。 – Tom 2015-03-14 01:01:06

+0

7)Ergo,自我執行的Query函數在內部服務頁面時不執行。 – Tom 2015-03-14 01:02:35