自己搞了個簡單的php 架構,使用 "
?var=val1&var2=val2
" 形式的url 視圖載入都正常,
apache
下為了美化url, 使用
.htaccess規則 隱藏index.php
並
使用pathinfo 格式
的url,頁面和資料都可以載入,但是 css、js檔案路徑卻變成了 pathinfo 格式的
url
/
public/css/style.css
了,導致css、js載入路徑出錯了。求一個正確的 .htaccess規則,讓樣式檔案正確載入。
目前的出錯情況:
項目架構放在 網站根目錄下的capframework檔案夾下 ,
使用 http://127.0.0.1/capframework/
訪問一切ok,css載入ok,
css url
為:http://127.0.0.1/capframework/public/css/captain.css
當使用 http://127.0.0.1/capframework/article/list/tag/php
訪問時,css、js就出問題,路徑變成了
http://127.0.0.1/capframework/article/list/tag/public/css/captain.css
當前使用的規則為:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]求高手指點,把問題解決
回複內容:
自己搞了個簡單的php 架構,使用 "?var=val1&var2=val2
" 形式的url 視圖載入都正常,
apache
下為了美化url, 使用 .htaccess規則 隱藏index.php
並使用pathinfo 格式
的url,頁面和資料都可以載入,但是 css、js檔案路徑卻變成了 pathinfo 格式的url
/public/css/style.css
了,導致css、js載入路徑出錯了。求一個正確的 .htaccess規則,讓樣式檔案正確載入。
目前的出錯情況:
項目架構放在 網站根目錄下的capframework檔案夾下 ,
使用 http://127.0.0.1/capframework/
訪問一切ok,css載入ok,
css url
為:http://127.0.0.1/capframework/public/css/captain.css
當使用 http://127.0.0.1/capframework/article/list/tag/php
訪問時,css、js就出問題,路徑變成了
http://127.0.0.1/capframework/article/list/tag/public/css/captain.css
當前使用的規則為:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]求高手指點,把問題解決
這不是.htaccess的問題啊,你代碼裡面對css的引用用了類似這種形式吧:
那麼當你的頁面路徑為http://127.0.0.1/capframework/article/list/tag/php
時,瀏覽器認為的css路徑就變成在目前的目錄下,拼接上public/css/captain.css
,所以就變成http://127.0.0.1/capframework/article/list/tag/public/css/captain.css
。
所以你需要這樣
但是這樣仍然不對,因為,瀏覽器就會認為css路勁是http://127.0.0.1/public/css/captain.css
。
因此,你還需要手動加入根目錄
然而,一般根目錄不是個確定的東西,所以需要變數化,所有的php架構幾乎都提供這麼個變數。
目測不是.ht檔案的錯誤,印象中:當連結對應的檔案存在時,是有限返迴文件的,當無法通過連結直接存取檔案時,才會去匹配相關規則。
初始設定檔案應該有WEB_ROOT吧 在模板檔案中這麼寫
{WEB_ROOT} / public/css/captain.css
應該就OK了吧
css路徑聲明的不對,方法1,在
裡面聲明就是基礎路徑設定,方法2,在引用css時使用絕對路徑,如
$baseUrl應該是http://127.0.0.1/capframework/public/
此外,通常為了安全考慮,.htaccess應該是放在public下面的,如果你配置虛擬機器主機的話也應該指向/capframework/public而不是/capframework,這樣能避免暴露其他的代碼。當然,index.php也應該處於public下面。
樓上正解!!在載入的靜態檔案路徑前加 ' / ' 即可。