簡體   English   中英

使用mod_rewrite和apache進行“動態”重寫

[英]“Dynamic” rewrite with mod_rewrite and apache

在為商店創建一個不錯的mod_rewrite解決方案時,我遇到了一個“戰略”問題。 該商店的頁面種類不同

  • 產品(products.php)
  • 類別(category.php)
  • 內容(content.php)

因此, “默認” URI如下所示

  • /products.php?id=2
  • /category.php?id=4
  • /content.php?id=5

最終結果應該是包含頁面名稱(產品名稱,類別名稱)的URI。

  • / chocholate-icecream-> product.php?id = 2
  • / coffe-and-ice-> category.php?id = 4
  • /版本記錄-> content.php?id = 5

我現在的問題是, 我有不同類型的內容 ,它們映射到不同的.php文件 而且,我無法確定要使用mod_rewrite路由到哪個.php文件,只要我不使用作弊行為(例如“ ** / product / ** chocolate-icrecream”),這樣我就知道此URI是為產品。 但是我和我的客戶不想要那種解決方案。

我已經開始另一次嘗試:

  • 與物理文件或文件夾不匹配的所有請求將路由到mapper.php文件。 該文件在數據庫中查找-我擁有所有產品,類別等的索引-並為我提供了正確的文件。
  • 然后, 映射器通過CURL加載內容並將其顯示給用戶

基本上我認為這是一個好主意,但是會話處理,發布數據,基於PHP的CURL重定向(標頭:...)有很多問題,我確實打算取消這種方式,等等。

所以我的問題是:你們中的任何人有沒有一個想法或模式可以幫助我在不使用復雜的CURL映射器的情況下創建“好看的” URI?

謝謝你,邁克

更新為“包含解決方案”:

“包含問題”的一個很好的例子:將www.shop.com/cart的請求“重寫”為“ mapper.php”。 “ mapper.php”決定包含www.shop.com/shoppingcart.php。

shoppingcart.php使用smarty來顯示購物車。 該視圖詢問$ _SERVER變量,是否實際的調用文件是“ shoppingcart.php”,以確定該頁面是應以全屏模式顯示還是帶有其他列。

在“普通/直接”調用中,$ _ SERVER ['PHP_SELF']將是“ /shopping_cart.php”,它將顯示全屏版本。 使用include選項遍歷mapper.php將給我們$ _SERVER ['PHP_SELF'] =='/ mapper.php'這將為我們提供帶有列的視圖(錯了)。

您可以簡單地通過將它們全部指向一頁然后包含基於段的適當腳本來執行此操作。 例如,重寫所有請求,例如index.php?slug = chocolate-icrecream。

index.php

$resource = fetch_resource($slug);
if ($resource->slug == 'product') 
{
  include('products.php');
}
else if ($resource->type == 'category')
{
  include('category.php');
}
else
{
  include('content.php');
}

我不明白為什么您不希望構建/ product / chocolate-icrecream之類的URL。 那將是一個很好的語義命名,它在當今的整個互聯網上是相當一致的。

暫無
暫無

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

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