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

是否有可能不使用 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 扩展名吗?

答案1

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

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

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

答案2

Mod_alias或许吧。比如:

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

答案3

它可以使用PATH_INFO-更多详细信息请点击此处

相关内容