我有這個(它的工作原理):在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,我不是?任何人的想法?
沒有快沒我這個後比我想象的使用站點相對或絕對路徑的所有資源......這解決了這個問題去嘗試。然而......在這種情況下有沒有辦法使用相對鏈接?在路由頁面中僅需要根目錄相關的鏈接看起來非常糟糕。 – rocketlaura 2015-03-31 21:34:51
首先,恭喜你認識到這裏的問題是你自己的(許多人開始使用mod_rewrite不會)。現在,至於使用引用域根的路徑來引用外部資源 - 這是很常見的做法。如果你希望能夠保持你的項目的靈活性,那麼你可以在某些時候將它移動到更深的子目錄中,建議將基本路徑配置爲一個常量或類似的東西,你可以用它作爲每個這樣的前綴你需要輸出的路徑。[...] – CBroe 2015-03-31 21:43:24
[...]首先,可以簡單地使用'/' - 然後將其簡單地輸出爲''動態通過PHP無論你需要引用外部資源。如果你需要將整個項目移動到一個文件夾中,在某個時候說'/ foobar /',那麼你只需改變該常量的值,並且所有動態生成的路徑都將適應,'/ js/foo.js'將會成爲'/ foobar/js/foo.js'等。 – CBroe 2015-03-31 21:44:42