高级Htaccess Rewrite规则用于PHP

3

我目前有以下代码来重写搜索引擎友好的url,使其适用于PHP处理,但是存在一些问题。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)/(.*) index.php?$1/$2

这将把domain.com/cat/mens/size/large/重写为domain.com/index.php?cat/mens/size/large/


如果我能够使用不同数量的子目录进行重写,那么将其重写为以下内容将是理想的,这对于PHP代码更加友好:

理想的重写:domain.com/index.php?cat=mens&size=large

另一个例子:domain.com/page/value/subpage/subvalue/something/true/

应该重写为:domain.com/index.php?page=value&subpage=subvalue&something=true


还有一种方法可以重写:domain.com/search/?q=blah+blah

为:domain.com/index.php?search&q=blah+blah

1个回答

2
尝试这个:
当url中的变量数量未预定义时,最好将其作为字符串传递给php,并让它处理它(explode、implode、foreach、build an array)。
至于您下面要求的内容:
基本上,RewriteRule的第一部分是给定的url,第二部分是传递给脚本的url。第一个括号内的每个(somethingInHere)都是一个变量,您可以在第二个中使用像$1、$2、$3和$4这样的变量。

是的,目前我所做的就是通过斜杠来分割字符串。例如,如果我想修改重写以处理以下内容:domain.com/cat/mens/size/large/?q=blah+blah&abc=123 我该怎么做呢?谢谢! :-) - Matt
使用 .htaccess 还是使用 PHP 处理字符串? - pawelmysior
由于当前的.htaccess文件没有将字符串的这一部分传递到重写中,因此在最后一个斜杠之后的任何内容PHP都无法看到。 - Matt
修改了答案,希望现在你都明白了。 - pawelmysior
我尝试实现的可能是这样的,以便目录和查询字符串的数量或名称不受限制,因此可以像这样工作(显然这不起作用):RewriteRule (.)/?(.) index.php?$1/$2谢谢! - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接