1

我一直在圍繞這個問題繞了整整一天,似乎沒有任何工作到目前爲止。我承認這可能是一個非常蹩腳的問題,但我現在甚至無法解釋它,但我會盡力期待得到一些幫助!前端控制器重定向工作正常,但某些路由的路由錯誤

我有一個前端控制器的MVC網站。所有的請求都被重定向到index.php,並且依賴於URI(我使用一個帶有路由的特殊數組進行用戶友好操作),我的前端控制器調用正確的控制器。標準路由。基本上它工作正常。除了一個細微差別。

.htaccess文件包含以下幾個:

RewriteEngine on 
RewriteBase /portfolio/test/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php 

這是我使用的用戶友好的URL,並調用相應的控制器路由的例子:

<?php 

return array (
    'main'    => 'index/main', //actionMain in IndexController 
    'contact'   => 'contact/index', 
    'prise'    => 'price/index', 
    'blog/([0-9]+)'  => 'blog/post/$1', 
    'blog'    => 'blog/list', 
    etc...  
); 

如果我去了/main頁面都很好,然後我點擊鏈接/portfolio,這也很好。

順便說一句,我的導航是自動使用'slug'和'名稱'菜單按鈕的數組。因此,在nav.php我拿蛞蝓和名稱的數組,像這樣:

<?php 

    $navItems = array(

     array(
      'slug'   => "main", 
      'title'   => "Main" 
      ), 

     array(
      'slug'   => "portfolio", 
      'title'   => "Portfolio" 
      ), 

     array(
      'slug'   => "prise", 
      'title'   => "Prise List" 
      ), 

     etc... 

    ); 

    ?> 

我用foreach這個陣列中,並使按鈕自動像這樣:

echo "<a href=\"$Item[slug]\">" 

但是,當我去blog/{some_article}出現問題(例如blog/1)或直接將blog/放入我的基本路徑(即www.example.com/porfolio/test/)之後的地址字段中。看起來問題不在於重定向,因爲調用了正確的控制器,甚至數據庫中的數據都在這裏。問題出現在HTML鏈接標記中,並在導航中自動生成超鏈接。現在他們看到基本路徑爲www.example.com/porfolio/test/blog/{some article},所以文件的路徑現在是錯誤的,所以我沒有看到我的樣式和圖片。我需要以某種方式擺脫這個基礎根部的blog/{some article}部分,但仍然可以在地址欄中看到它,或者至少了解隱藏問題的位置。

回答

0

問題出現在HTML鏈接標記中,並在導航中自動生成超鏈接。現在他們看到基本路徑爲www.example.com/porfolio/test/blog/{some article},所以文件的路徑現在是錯誤的,所以我沒有看到我的樣式和圖片。

這聽起來像一個客戶端相對路徑「問題」。如果您將相對URL用於樣式和圖片,則網址現在相對於/porfolio/test/blog/而不是/porfolio/test/

您需要在您的客戶端HTML要麼使用絕對或根目錄相對(開始用斜槓)的URL,或在head部分使用base標記,通知瀏覽器是什麼,這些相對路徑是相對到。

看到我的專業網絡管理者堆棧答案細節:
.htaccess rewrite url leads to missing css