2017-08-03 68 views
3

我正在學習使用php進行路由。我能夠在沒有任何錯誤的情況下路由該頁面,但我堅持包含cssjs文件。我用於教程和示例的媒體是laracast視頻。我也使用xampp作爲Windows上的apache服務器。PHP路由 - 錯誤包括css/js文件

我想讓我自己的實踐和下面的圖片是我的.htaccess文件,我做的文件結構,

,我有:

RewriteEngine On 
RewriteBase /season-temp 
RewriteRule ^.*$ index.php [END] 

在我的視圖文件夾中,我有所有的查看頁面文件,包括headerfooter包括cssjs

的header.php

<!DOCTYPE html> 
<html lang="en"> 

<head> 

    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 

    <title>Logo Nav - Start Bootstrap Template</title> 

    <!-- Bootstrap Core CSS --> 
    <link href="/css/bootstrap.min.css" rel="stylesheet"> 

    <!-- Custom CSS --> 
    <link href="/css/logo-nav.css" rel="stylesheet"> 

</head> 
<body> 

<?php require('navigations.php'); ?> 

footer.php

<!-- jQuery --> 
<script src="/js/jquery.js"></script> 

<!-- Bootstrap Core JavaScript --> 
<script src="/js/bootstrap.min.js"></script> 

</body> 

</html> 

從上面的代碼,就會給出一個錯誤:

GET http://localhost/css/bootstrap.min.css 
GET http://localhost/css/logo-nav.css 
GET http://localhost/js/jquery.js 
GET http://localhost/js/bootstrap.min.js 

我試圖插入<base href="/">頭部分,並在每個src/href上創建鏈接,如'season-temp/<folder_name>/<file_name>',例如; 'season-temp/css/bootstrap.min.css'但仍無法獲取css和js文件。

我該如何包含這些文件?

Update - Incorrect output

首先,對以下解決方案的錯誤更新表示歉意。 css和js確實有效,但鏈接已斷開。如果我撤銷@Triby答案的.htaccess文件庫,鏈接工作正常,但css和js不是。下面是該頁面爲我navigations.phproutes.php

navigations.php

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
    <ul class="nav navbar-nav"> 
     <li> 
     <a href="/season-temp/about">About</a> 
     </li> 
     <li> 
     <a href="/season-temp/services">Services</a> 
     </li> 
     <li> 
     <a href="/season-temp/contact">Contact</a> 
     </li> 
    </ul> 
</div> 

routes.php文件

<?php 

$router->get('season-temp','controllers/index.php'); 

$router->get('season-temp/about','controllers/about.php'); 

$router->get('season-temp/services','controllers/services.php'); 

$router->get('season-temp/contact','controllers/contact.php'); 

如果我作爲@ceejayoz提到的CSS更新的鏈接,並js文件,我得到一個錯誤:

<br /> 
<b>Fatal error</b>: Uncaught exception 'Exception' with message 
'No route defined for this URI.' 
in C:\xampp\htdocs\season-temp\core\router.php:30 
Stack trace: 
#0 C:\xampp\htdocs\season-temp\index.php(9): 
Router-&gt;direct('season-temp/js/...', 'GET') 
#1 {main} 
thrown in <b>C:\xampp\htdocs\season-temp\core\router.php</b> 
on line <b>30</b><br /> 
+0

這是不是一個錯誤。什麼是實際的錯誤?是否可以訪問URL http://localhost/css/bootstrap.min.css? – ceejayoz

+0

@ceejayoz好像他們這樣做,檢查提供的圖像 – brianforan

+0

@ceejayoz對不起,沒有指出它的權利。如果我複製並粘貼網址'http:// localhost/css/bootstrap.min.css'。無法通過'error 404'檢索頁面。 – Khairul

回答

2

您正在將所有內容重定向到索引。PHP,儘量只重定向不存在的文件或目錄:

RewriteEngine On 
RewriteBase /season-temp 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ index.php [L] 

L爲避免處理時的規則匹配

+0

感謝您的幫助!最後讓它工作。你有沒有參考Rewrite部分。仍然混淆,或者你可以簡要說明條件=) – Khairul

+1

%{REQUEST_FILENAME}是通過URL請求的文件或目錄,!-f將應用規則如果文件不存在,!-d如果目錄不存在。 – Triby

+0

這意味着如果_file_或_directory_不存在,則執行下面的規則。這是指向'index.php'。我對嗎? – Khairul

0

I am accessing using http://localhost/season-temp/

這是問題下面的任何規則。

你的文件都提到這樣的:

<script src="/js/jquery.js"></script> 

,但你應該使用:

<script src="/season-temp/js/jquery.js"></script> 
+0

我已經嘗試插入像你建議但仍然無法正確。解決方案來自@Triby答案。除了'.htaccess'文件,我還需要刪除每個鏈接上的'前斜槓'/'。例如,'/ js/jquery.js'將會是'js/jquery.js' – Khairul