我正在为使用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/flowers ( section不存在)时,它将在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 – 更多细节在这里 。