Apache-2.2
是否可以在不使用 mod_rewrite 的情況下刪除 .php 副檔名?
我正在為一個在 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/flowers
(section
不存在)時,它會section.*
在shop
文件夾中查找,根據瀏覽器發送的媒體類型和內容編碼進行排序,並選擇最佳匹配。
Mod_alias,也許。就像是:
AliasMatch ^/shop/section/(.*)/(.*)/(.*)$ /shop/section.php?xSec=$1&xPage=$3 AliasMatch ^/shop/product/(.*)/(.*)$ /shop/product.php?xSec=$1