繁体   English   中英

mod_rewrite规则

[英]mod_rewrite rule

什么规则会像这样翻译网址?

host.com/plastic_toys/pink_barbie/
host.com/index.php?q=plastic+toys+pink+barbie

类别和产品名称中的组件数量各不相同。

编辑:

我想这条规则可以完成部分工作:

RewriteRule ^([^/]*)/([^/]*)$ /index.php?q=$1+$2 [L]

上述规则的问题在于它不会将下划线转换为+ ,因此它会像这样翻译:

host.com/plastic_toys/pink_barbie/
host.com/index.php?q=plastic_toys+pink_barbie

我想我必须将转换委托给PHP。 现在有没有办法测试规则是否实际按照我的想象进行转换?

有没有理由(现有代码等)你需要完全重写这个?

通常,我这样做

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

然后解析$_GET["q"]甚至直接解析$_SERVER["REQUEST_URI"] preg_match()是你的朋友。

使用这两种方法中的一种方法比尝试进行奇怪的重写需要花费更少的时间。

首先 - 我建议使用以下规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z_]+)/([a-zA-Z_]+)/?$ /index.php?q1=$1&q2=$2 [L,QSA]

RewriteCond每次都检查一个有效的文件或目录是否存在(例如,如果你想要一个静态的/help.html并且它存在,或者/FAQ/index.php并且它存在,那么RewriteRule将不会触发。

我已将参数拆分为2个项目 - 因此您可以将它们视为单独的参数(如果您想将其视为1参数,只需将其更改为/index.php?q=$1-$2或您想要的其他分隔符) - 我会说不要使用+,因为你想解析那个角色无论如何)。

没有。 规则如何知道在类别和产品之间划线的位置。 如果查询有3个参数怎么办? 前两个是产品类别,也是最后一个产品,或者是第一个产品类别和最后两个产品。

暂无
暂无

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

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