【发布时间】:2014-08-29 22:29:45
【问题描述】:
在为商店创建一个不错的 mod_rewrite 解决方案时,我遇到了一些“战略”问题。该商店有不同类型的页面:
- 产品(products.php)
- 类别(category.php)
- 内容 (content.php)
所以“默认”URI 看起来像这样:
- /products.php?id=2
- /category.php?id=4
- /content.php?id=5
最终结果应该是一个包含页面名称(产品名称、类别名称)的 URI。
- /chocholate-icecream -> product.php?id=2
- /coffe-and-ice -> category.php?id=4
- /印记-> content.php?id=5
我现在的问题是,我有不同类型的内容,它们映射到不同的 .php 文件。而且我无法确定要使用 mod_rewrite 路由到哪个 .php 文件,只要我不使用“像 **/product/**chocolate-icrecream”这样的作弊,这样我就知道这个 URI 是为产品。但我和我的客户不想要那个解决方案。
我已经开始了另一次尝试:
- 所有与物理文件或文件夹不匹配的请求都被路由到 mapper.php 文件。该文件在数据库中查找 - 我有一个包含所有产品、类别等的索引 - 并为我提供了正确的文件。
- 映射器然后通过 CURL 加载内容并将其显示给用户
基本上我认为这是一个好主意,但是会话处理、发布数据、基于 php 的重定向(标题:...)与 CURL 存在很多问题,我真的打算以这种方式取消等等等等。
所以我的问题是: 你们中的任何人有什么想法或模式可以帮助我在不使用复杂的 CURL 映射器的情况下创建“好看”的 URI 吗?
提前非常感谢, 迈克
更新到“包括解决方案”:
“包含问题”的一个很好的例子: 对 www.shop.com/cart 的请求被“重写”为“mapper.php”。 “mapper.php”决定包含 www.shop.com/shoppingcart.php。
shoppingcart.php 使用 smarty 来显示购物车。视图询问 $_SERVER 变量,如果实际调用的文件是“shoppingcart.php”来决定页面是否应该以全屏模式显示或附加列。
在“正常/直接”调用中,$_SERVER['PHP_SELF'] 将是“/shopping_cart.php”,它将显示全屏版本。使用 include 选项检查 mapper.php 将为我们提供 $_SERVER['PHP_SELF']=='/mapper.php' ,这将为我们提供带有列的视图(出了什么问题)。
【问题讨论】:
标签: php apache .htaccess mod-rewrite curl