是否可以不使用 mod_rewrite 删除 .php 扩展名?

rwi*_*red 1 php mod-rewrite seo .htaccess apache-2.2

我正在为客户管理一个电子商务网站,该网站是使用 Apache 上的 JShop 构建的。出于 SEO 的原因,链接类似于:

http://www.domain.com/shop/section/3151/1/flowers
http://www.domain.com/shop/product/35465/blueflower
Run Code Online (Sandbox Code Playgroud)

映射到:

http://www.domain.com/shop/section.php/3151/1/flowers
http://www.domain.com/shop/product.php/35465/blueflower
Run Code Online (Sandbox Code Playgroud)

提供与以下相同的页面:

http://www.domain.com/shop/section.php?xSec=3151&xPage=1
http://www.domain.com/shop/product.php?xSec=35465
Run Code Online (Sandbox Code Playgroud)

不知何故,这是在没有mod_rewrite 的情况下实现的(我已经通过禁用 mod_rewrite 并注释掉所有 conf 和 .htaccess 文件中的所有重写规则来确认这一点)。

注意:文件 section.php 和 product.php 存在,但 section 和 product 不存在,也没有符号链接。

问题是在生产服务器上这种行为停止发生。在我的开发服务器上它仍然有效。我能够通过使用 mod_rewrite 使生产服务器再次正常工作,因为这是我知道如何做到这一点的唯一方法。但是,我真的需要首先知道生产服务器上发生了什么变化,以便我可以正确理解问题(以避免其他不可预见的后果)。我已经重新启动了 Apache 并撤消了在 URL 损坏时我在生产服务器上所做的所有更改。它们仍然被破坏(没有我的新重写规则)。

除了mod_rewrite之外,还有哪些方法可用于从 URL 中删除 .php 扩展名?

qua*_*nta 5

内容协商可以做到这一点。MultiViewsshop文件夹启用:

<Directory "/path/to/shop">
    Options FollowSymLinks +MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

当服务器收到请求/shop/section/3151/1/flowerssection不存在)时,它会section.*shop文件夹中查找,根据浏览器发送的媒体类型和内容编码进行排序并选择最佳匹配。