是否有可能删除.php扩展名WITHOUT使用mod_rewrite?

我正在为使用Apache上的JShop构build的客户pipe理电子商务网站。 对于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扩展名?

内容协商可以做到这一点。 为shop文件夹启用MultiViews

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

当服务器接收到一个请求/shop/section/3151/1/flowerssection不存在)时,它将在shop文件夹中查找section.* ,根据浏览器发送的媒体types和内容编码进行sortingselect最佳匹配。

也许是Mod_alias 。 就像是:

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

这可能是使用PATH_INFO – 更多细节在这里 。