我正在为客户管理一个电子商务网站,该网站是使用 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
内容协商可以做到这一点。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
答案2
Mod_alias或许吧。比如:
AliasMatch ^/shop/section/(.*)/(.*)/(.*)$ /shop/section.php?xSec=$1&xPage=$3
AliasMatch ^/shop/product/(.*)/(.*)$ /shop/product.php?xSec=$1
答案3
它可以使用PATH_INFO
-更多详细信息请点击此处。