我为商店创建一个不错的mod_rewrite解决方案有点“战略性”问题。该商店有不同类型的页面:
所以“默认”URI看起来像这样:
最终结果应该是包含页面名称的URI(产品名称,类别名称)。
我现在的问题是,我有不同类型的内容,映射到不同的.php文件。并且我无法确定使用mod_rewrite路由哪个.php文件,只要我不使用作弊“喜欢** / product / ** chocolate-icrecream”以便我知道这个URI是为了产品。但我和我的客户不想要那个解决方案。
我已经开始了另一次尝试:
基本上我认为这是个好主意,但会话处理,发布数据,基于php的重定向(标题:...)与CURL有很多问题,我真的打算以这种方式取消等等。< / p>
所以我的问题是: 你有没有一个想法或模式可以帮助我创建“漂亮的”URI而不使用复杂的CURL映射器?
提前多多感谢, 麦克
“包含问题”的一个很好的例子: 请求www.shop.com/cart将“重写”为“mapper.php”。 “mapper.php”决定包括www.shop.com/shoppingcart.php。
shoppingcart.php使用smarty来显示购物车。如果实际调用的文件是“shoppingcart.php”,则视图会询问$ _SERVER变量,以确定页面是以全屏模式还是以其他列显示。
在“普通/直接”调用中,$ _SERVER ['PHP_SELF']将为“/shopping_cart.php”,它将显示全屏版本。使用include选项查看mapper.php会给我们$ _SERVER ['PHP_SELF'] =='/ mapper.php'这将给我们带有列的视图(错误)。
答案 0 :(得分:0)
你可以简单地将它们全部指向一个页面,然后根据slug包含正确的脚本。例如,重写所有请求,如index.php?slug = chocolate-icrecream。
的index.php
$resource = fetch_resource($slug);
if ($resource->slug == 'product')
{
include('products.php');
}
else if ($resource->type == 'category')
{
include('category.php');
}
else
{
include('content.php');
}
我不明白为什么你不想像/ product / chocolate-icrecream那样构建你的网址。那将是良好的语义命名,现在在互联网上相当一致。
答案 1 :(得分:0)
你想要做的事情太复杂了,为什么不给每个文件提供一个URI,比如
您可以使用产品,类别或内容的id
,而不是使用slug
htaccess就像
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteRule ^product/(.*)$ products.php?slug=$1 [L]
RewriteRule ^category/(.*)$ category.php?slug=$1 [L]
RewriteRule ^content/(.*)$ content.php?slug=$1 [L]