Apache-2.2

是否可以在不使用 mod_rewrite 的情況下刪除 .php 副檔名?

  • September 13, 2011

我正在為一個在 Apache 上使用 JShop 建構的客戶管理一個電子商務站點。出於 SEO 原因,連結如下:

http://www.domain.com/shop/section/3151/1/flowers
http://www.domain.com/shop/product/35465/blueflower

映射到:

http://www.domain.com/shop/section.php/3151/1/flowers
http://www.domain.com/shop/product.php/35465/blueflower

給出與以下相同的頁面:

http://www.domain.com/shop/section.php?xSec=3151&xPage=1
http://www.domain.com/shop/product.php?xSec=35465

不知何故,這是在沒有mod_rewrite 的情況下實現的(我已經通過禁用 mod_rewrite 並註釋掉所有 conf 和 .htaccess 文件中的所有重寫規則來確認這一點)。

注意:文件 section.php 和 product.php 存在,但 section 和 product 不存在,也沒有符號連結。

問題是在生產伺服器上這種行為停止發生。在我的開發伺服器上它仍然有效。我能夠通過使用 mod_rewrite 讓生產伺服器再次正常工作,因為這是我知道如何做到這一點的唯一方法。但是我真的需要首先知道生產伺服器上發生了什麼變化,這樣我才能正確理解問題(以避免其他不可預見的後果)。我已重新啟動 Apache 並撤消了在 URL 損壞時我在生產伺服器上所做的所有更改。它們仍然被破壞(沒有我的新重寫規則)。

除了mod_rewrite 之外,還有哪些方法可用於從 URL 中刪除 .php 副檔名?

內容協商可以做到這一點。MultiViews為文件夾啟用shop

<Directory "/path/to/shop">
   Options FollowSymLinks +MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

當伺服器收到請求/shop/section/3151/1/flowerssection不存在)時,它會section.*shop文件夾中查找,根據瀏覽器發送的媒體類型和內容編碼進行排序,並選擇最佳匹配。

Mod_alias,也許。就像是:

AliasMatch ^/shop/section/(.*)/(.*)/(.*)$ /shop/section.php?xSec=$1&xPage=$3
AliasMatch ^/shop/product/(.*)/(.*)$ /shop/product.php?xSec=$1

引用自:https://serverfault.com/questions/310763