Apache URL重写操作方法



我从未接触过regex或apache重写的东西,但我为一位客户创建了一个大型电子商务网站,他刚刚问我是否可以为他的商店重写URL。我需要2个,如果有人能告诉我是否有可能重写他想要的内容,那将是一个很大的帮助

产品详细信息URL当前为:产品/细节/3/宝蓝合唱团偷走

他希望它只是。。。/皇家蓝合唱团偷走

第二个是分类页。他们目前是

类别/视图/唱诗班stoles

他希望他们只是/合唱团偷走

这可能吗?该网站的完整url当前为http://www.stoles.com/stoles(用户名亚历克斯,密码超人)如果你想看看目前做了什么。它在代码点火器中编程。

目前,它有以下重写,以摆脱代码点火器URL中的index.php。。。

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

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

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

但如果你想不加前缀,那么你可以将url与你的产品标题或类别名称相匹配。例如:
您有一个名称为"Choir Stoles"的类别,产品名称为"royal blue Choir Stokes">
现在您可以在htaccess中使用以下代码行:

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

然后你可以在router.php中获得$_get['q'],并将"-"替换为空格,在数据库中搜索,找出它是类别还是产品,然后从数据库中获得信息<希望对你有所帮助。>

用于产品url(add-in-routes.php)(product/details/blah-blah-blah)

将路由中的值更改为

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

对于类别url(类别/视图/诸如此类)

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

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

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

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

否则,如果类别不断变化,或者你想以同样的方式生产产品,那么你就必须搜索url中的任何值——可以是任何值。那么我想知道的是,如果你收到这样的请求,会发生什么样的预过滤

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

在转到数据库和控制器之前已停止。

是否应该在Routes中进行这种类型的筛选我们应该记录这种尝试吗?如果他们连续几次禁止IP?或者这是过于偏执而不值得关注?

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

最新更新