0

我从来没有接触过正则表达式或 apache 重写的东西,但我为客户做了一个大型电子商务网站,他现在问我是否可以为他的商店重写 URL。我有两个我需要的东西,如果有人能告诉我是否有可能重写他想要的方式,那将是非常有帮助的。

产品详情网址目前为:product/details/3/royal-blue-choir-stole

他希望它只是... /royal-blue-choir-stole

第二个是类别页面。他们目前在

类别/视图/合唱团围巾

他希望他们只是 /choir-stoles

这可能吗?如果您想查看当前所做的工作,该站点的完整 URL 目前是http://www.stoles.com/stoles (用户名 alex,密码 superman)。它在codeigniter中编程。

目前,它进行了以下重写,以摆脱 codeigniter URL 中的 index.php ...

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
4

3 回答 3

0

这是我真正感兴趣的事情。如果您的类别数量有限且不会经常更改,那么对类别路线进行硬编码似乎是合理的。

 $route['choir-stoles'] = "shop/choir-stoles";

否则,如果类别不断变化,或者如果您想以相同的方式制作产品,那么您将不得不搜索 url 中的任何值 - 这可能是任何值。那么我想知道的是-可能会发生什么样的预过滤,所以如果您收到类似的请求

 http://www.stoles.com/213as+dfjljWHATEVER

它在进入数据库和控制器之前停止了。

这种类型的过滤应该发生在路由中吗?我们应该记录这些尝试吗?如果他们连续几次禁止IP?或者这是否过于偏执而不是一个问题?

现在的风格是把搜索价值推到一个词后面,比如“产品”、“类别”等,但更多的客户会要求短网址,想出一些最佳实践会很酷。

于 2012-11-26T17:53:57.360 回答
0

首先,类别 url 和产品详细信息 url 应该不同,可能是这样的:

product details  :   pd/royal-blue-choir-stole    
category         :   /choir-stoles 

但是,如果您想不使用前缀,则可以将 url 与您的产品标题或类别名称相匹配。例如:
您有一个名称为“Choir Stoles”的类别,产品名称为“royal blue choir stole”。
现在您可以在 htaccess 中使用这些代码行:

RewriteRule /([a-z\-]+)$ router.php?q=$1  [NC,L] 

然后您可以在 router.php 中获取 $_GET['q'] 并用空格替换“-”,在数据库中搜索并找出它是类别还是产品,然后从数据库中获取信息。
希望有帮助。

于 2012-11-26T09:08:10.080 回答
0

对于产品 url(添加在 routes.php 中)(product/details/blah-blah-blah-blah)

将路线中的值更改为

$route['product/:any'] = "product/details";
product ->controller
details -> action

对于类别 url (类别/视图/blah-blah)

$route['catagory/:any'] = "catagory/details";
    catagory ->controller
    details -> action

http://ellislab.com/codeigniter/user-guide/general/routing.html

于 2012-11-26T09:08:27.880 回答