使用.htaccess&amp ;;清除子组的URL。 PHP

时间:2016-02-01 16:37:19

标签: php apache .htaccess

如何转换网址如下:

http://localhost/series/dynamics/admin/cleanURL/value1?subgroup=value2

更清晰的网址

例如:http://localhost/series/dynamics/admin/cleanURL/value1/value2

我正在使用$ _GET并可以选择使用$ _SERVER ['REQUEST_URI']。 php文件的名称是index.php。我已经设法为第一个参数(即value1)实现了干净的URL,但对于如何为value2做了一些无知

我的htaccess看起来像这样,很确定它需要传递第二个参数,但无法弄清楚如何。

 Rewriteengine on
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 Rewriterule ^([a-zA-Z]+)$ index.php?group=$1

我尝试过:^([a-zA-Z]+)$ index.php?group=$1?subgroup=$2和其他一些方法,但没有一种方法正常工作

请看下面的2个PHP代码,我不确定“& amp”是否可以完成除“?”以外的任何工作。带我去另一页。

<li id="nav"<?php if($pageid==$nav['group']){echo'class="active"';}?>><a href="<?php echo $nav['group'];?>"><?php echo $nav['product']?></a></li>


<a href="?subgroup=<?php echo $list['subgroup']; ?>" <?php if($tst1 == $list['subgroup']){echo 'class="active"';} ?> ><?php echo $list['subgroup']."(".$list['contains'].")".'<br/>';?></a>

我可以使用“&amp;”代替 ”?”在子组的链接?

1 个答案:

答案 0 :(得分:0)

我看到了一些问题。每当您需要添加其他参数时,您需要在capture group中添加另一个([a-zA-Z]+) RewriteRule pattern,否则它将无法在URI中查找。因此,如果在模式中没有其他捕获组,则使用反向引用$2将为空,因为您只有一个。

此外,您的查询字符串格式无效。您只在开头使用?一次,然后使用&符号(&)添加更多键/值对。

这样的事情可能就是你所追求的。我稍微改了一下,以防止多次写入条件。

 RewriteEngine on

 #if file or directory is real, do nothing
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILENAME} -d
 RewriteRule ^ - [L]

 #rewrite group and subgroup e.g. http://.../value1/value2/
 Rewriterule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php?group=$1&subgroup=$2 [L]
 #rewrite group e.g. http://.../value1/
 Rewriterule ^([a-zA-Z]+)/?$ index.php?group=$1 [L]