2015-03-31 70 views
0

我有這個(它的工作原理):在Apache上使用PHP,我設置了htaccess來將所有通用友好/ URL /路徑/斜槓路由到index.php。這裏是我的htaccess代碼:使用Apache mod_rewrite鏈接文件路由不起作用

RewriteEngine On 

# Redirect Trailing Slashes... 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

出於測試目的,我的index.php文件包含了非常簡單的HTML,有一個鏈接到一個JavaScript文件,它在適當的路徑存在:

<!DOCTYPE html> 
<html> 
<head> 
<title>A Test Page Goes Here</title> 
    <script src="foo.js" type="text/javascript"></script> 
</head> 
<body></body> 
</html> 

foo的js文件其中我打電話了裏面只有簡單的診斷:

console.log('howdy'); 

,當我嘗試訪問使用了正確的URL頁面,系統沒有呼叫重定向,它的偉大工程。就像這樣:

http://myhost/index.php 

當我嘗試訪問該頁面使用網址參數,就像這樣:

http://myhost/home 

一切仍然正常工作。該頁面出現,JavaScript鏈接起作用。

但是當我嘗試使用更多的URL件訪問的頁面,就像這樣:

http://myhost/pages/home 

我得到兩個錯誤,就像這樣:

Uncaught SyntaxError: Unexpected token < 

Resource interpreted as Script but 
transferred with MIME type text/html: "http://myhost/home/foo.js". 

當我使用瀏覽器的開發工具看看導致錯誤的JS代碼,下面是JS文件的內容:與我的index.php文件返回的完全相同的HTML。 (所以,難怪會產生JavaScript錯誤。)

所以,告訴我的是,從我的HTML代碼調用foo.js的調用被重定向,並且index.php的內容被返回而不是foo.js的內容但它只會在我的網址中有多個元素時發生。

順便說一句,它不僅僅是JS不能正常工作...... CSS文件的任何鏈接都會遇到同樣的問題(它們會從index.php返回HTML)。所以它似乎是鏈接並返回另一個文件,而不是它是什麼類型的文件。

所以...我很難過。是否有一些訣竅,我需要使用htaccess,我不是?任何人的想法?

+0

沒有快沒我這個後比我想象的使用站點相對或絕對路徑的所有資源......這解決了這個問題去嘗試。然而......在這種情況下有沒有辦法使用相對鏈接?在路由頁面中僅需要根目錄相關的鏈接看起來非常糟糕。 – rocketlaura 2015-03-31 21:34:51

+0

首先,恭喜你認識到這裏的問題是你自己的(許多人開始使用mod_rewrite不會)。現在,至於使用引用域根的路徑來引用外部資源 - 這是很常見的做法。如果你希望能夠保持你的項目的靈活性,那麼你可以在某些時候將它移動到更深的子目錄中,建議將基本路徑配置爲一個常量或類似的東西,你可以用它作爲每個這樣的前綴你需要輸出的路徑。[...] – CBroe 2015-03-31 21:43:24

+0

[...]首先,可以簡單地使用'/' - 然後將其簡單地輸出爲''動態通過PHP無論你需要引用外部資源。如果你需要將整個項目移動到一個文件夾中,在某個時候說'/ foobar /',那麼你只需改變該常量的值,並且所有動態生成的路徑都將適應,'/ js/foo.js'將會成爲'/ foobar/js/foo.js'等。 – CBroe 2015-03-31 21:44:42

回答

0

你的HTML更改爲以下:

<!DOCTYPE html> 
<html> 
<head> 
<title>A Test Page Goes Here</title> 
    <script src="/foo.js" type="text/javascript"></script> 
</head> 
<body></body> 
</html> 
+0

是的,我發現了什麼(以及其他評論中提到的)。謝謝大家的回覆。如果我在我的URL中使用斜線,即使它將被重定向,那些斜線也會成爲瀏覽器確定文檔相關鏈接的一部分。 – rocketlaura 2015-03-31 21:54:05