2011-06-25 101 views
1

這很難解釋,所以希望我能夠在我的問題中理解。.htaccess將子目錄重定向爲php中的查詢字符串

(1)我想創建「SEO友好」的鏈接,從網站中刪除查詢字符串。只有一個變量,我們稱之爲「頁面」。以下是我的.htaccess文件的以下代碼。

Options +FollowSymLinks 

RewriteEngine On 
RewriteRule ^(.*)$ index.php?page=$1 

這可以提供正確的重定向。所以​​將發送到index.php?page=applications

(2)我的index.php將包含基於$_GET['page']的值的查看頁面。以下是一些示例代碼:

switch ($_REQUEST['page']) { 

    default: 
    include ("home.php"); 
    break; 

    case "apps": 
    include ("apps.php"); 
    break; 

} 

到目前爲止似乎沒有問題。

(3)讓我們製作apps.php的精確副本home.php。 home.php加載得很好,但apps.php不會加載鏈接的CSS和JScript頁面。當加載apps.php時,它認爲它位於/apps/目錄中。要加載鏈接的頁面,我需要在文件名前面插入「../」。然後它顯示正確。

所以我的問題是 - 如何正確我寫.htaccess文件,使home.phpapps.php頁面可以是相同的文件,併產生相同的結果,而不是被處理apps.php文件,就好像它是在/apps/目錄?

回答

0

首先,我應該道歉,因爲我沒有涉及到在htaccess中進行更改的解決方案。我的解決方案性質不同。

我認爲,如果你有一個配置變量,最好在配置文件中,這將保存根文件夾的圖像,js等問題可以解決大多數時間其public_html,文檔根,其中url您的網站指向。所以你的配置變量可能看起來像:

$base_url = 'http://www.mywebsite.com/'; 

配置文件應該無條件地納入index.php文件。

所以,當你包括任何JS或圖片,你做這樣的:

<script type="text/javascript" src="<?php echo $base_url;?>js/global.js" /> 

<img src="<?php echo $base_url;?>images/gradient_green.jpg" /> 

如果您在index.php的配置文件,所有文件你包括基於交換機情況的條件,將能夠使用$ base_url變量。

另一種可能的解決方案是使用基本標籤。看它這裏:

http://www.w3schools.com/TAGS/tag_base.asp

我希望這有助於。

+0

感謝您的回覆。我想我的問題還不夠清楚。我正在使用Dreamweaver進行設計,並希望在發佈之前查看我的創作。在我的html文本中添加php代碼會搞亂預覽。我只是希望新鏈接不被視爲它在自己的目錄中,需要一個變量或在所有鏈接之前插入../。 – Chad

0

對網頁上的js,css和圖片使用絕對網址(以斜線開頭)。

/js/main.js而不是JS/main.js

0

你不能做到這一點與的.htaccess除非你做一個外部重定向(通過添加[R]標誌的重寫規則)。但是,然後你公開查詢字符串,這是你首先要避免的。

它無法完成的原因:它不是「認爲它在/ apps /目錄中」的apps.php - 它是「認爲」的瀏覽器。在由apps.php生成的頁面源中,您將相對URL發送回瀏覽器,現在瀏覽器將請求這些資源相對於它要求的頁面的位置。對於瀏覽器來說,它的頁面位於/ apps /中,而不管你在服務器端內部應用了什麼重寫。

所以,你有三種選擇:

  • 不要放棄你的.htaccess外部重定向(和擊敗你的初衷;-)
  • 更改動態的URL與PHP在處理apps.php等,正如你所說(前綴../到網址)
  • 使用絕對URL,就像@nobody在他的回答中所建議的。

最後一個是唯一的真正選擇恕我直言。

相關問題