簡體   English   中英

.htaccess重定向子目錄作為php中的查詢字符串

[英].htaccess redirect subdirectory as query string in php

這很難解釋,所以希望我對我的問題有所了解。

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

Options +FollowSymLinks

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

這可以提供正確的重定向。 因此, /applications/將發送到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/目錄?

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

我認為,如果您有一個config變量(最好是在一個配置文件中)可以解決問題,該文件將保存圖像,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

我希望這有幫助。

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

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

除非進行外部重定向(通過將[R]標志添加到RewriteRule中),否則無法使用.htaccess進行操作。 但是隨后您公開了查詢字符串,這是您首先要避免的字符串。

無法完成的原因:不是apps.php認為它在/ apps /目錄中,而是瀏覽器認為。 在apps.php生成的頁面源中,您將相對URL發送回瀏覽器,現在瀏覽器將請求相對於其所請求頁面位置的這些資源。 對於瀏覽器,無論您在服務器端內部進行了什么重寫,它所獲得的頁面都位於/ apps /中。

因此,您有以下選擇:

  • 使用.htaccess進行外部重定向(並破壞您的初衷;-)
  • 如您所說,在處理apps.php等的同時,用PHP動態更改URL(在URL前面加../)
  • 使用絕對URL,就像@nobody在他的答案中建議的那樣。

最后一個是唯一的實物選項恕我直言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM