繁体   English   中英

Apache URL重写方法

[英]Apache URL Rewrite How To

我从未接触过正则表达式或apache重写的东西,但是我已经为一个客户建立了一个大型的电子商务网站,而他现在正在问我是否可以为其商店进行URL重写。 我有2个我需要的东西,如果有人告诉我是否甚至有可能重写他的要求,那将对您有很大的帮助。

产品详细信息URL当前为:product / details / 3 / royal-blue-choir-stole

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

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

类别/视图/合唱团

他想让他们成为/合唱团

这可能吗? 如果要查看当前操作,该站点的完整URL当前为http://www.stoles.com/stoles (用户名alex,密码超人)。 它在codeigniter中编程。

目前,它具有以下重写功能,以消除codeigniter 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 stole”。
现在您可以在htaccess中使用以下代码行:

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

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

产品网址(添加到route.php中)(产品/详细信息/ blah-blah-blah-blah)

将路线中的值更改为

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

用于类别网址(category / view / blah-blah)

$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

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

这种类型的过滤是否应该在路线中进行? 我们应该记录这些尝试吗? 禁止IP,如果他们连续几次呢? 还是这过于偏执而不必担心?

现在的风格是将搜索值推到“产品”,“类别”等一个词的后面,但是更多的客户会要求输入简短的网址,提出一些最佳做法将很酷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM