重写并区分同一级别的两个GET参数

时间:2014-07-01 20:27:26

标签: php .htaccess mod-rewrite rewrite

我有一个PHP脚本,根据GET参数输出不同的东西。

PHP代码:

if((isset($_GET['channel'])) && (!isset($_GET['profile']) && !isset($_GET['c']) && !isset($_GET['b']) && !isset($_GET['highlight']) && !isset($_GET['broadcast']))){

  echo 'Output1';

} elseif((isset($_GET['channel']) && isset($_GET['profile'])) && (!isset($_GET['c']) && !isset($_GET['b']) && !isset($_GET['highlight']) && !isset($_GET['broadcast']))) {

  echo 'Output2';

} elseif((isset($_GET['channel']) && isset($_GET['c']) && isset($_GET['highlight'])) && (!isset($_GET['profile']) && !isset($_GET['b']) && !isset($_GET['broadcast']))) {

  echo 'Output3';

} elseif((isset($_GET['channel']) && isset($_GET['b']) && isset($_GET['broadcast'])) && (!isset($_GET['profile']) && !isset($_GET['c']) && !isset($_GET['hightlight']))) {

  echo 'Output4';

}

当前.htaccess:

RewriteEngine on

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ ?channel=$1&b=$2&broadcast=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ ?channel=$1&c=$2&highlight=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ ?channel=$1&profile=$2 [L,QSA]
RewriteRule ^([^/]+)/?$ ?channel=$1 [L,QSA]

我需要它如何工作:
example.com/channel/c/12345 输出“输出3
example.com/channel/b/12345 输出“输出4

现在如何运作:
example.com/channel/c/12345 输出“输出4
example.com/channel/b/12345 输出“输出4

有没有聪明的方法让我的工作像我想要的那样?

提前致谢!

1 个答案:

答案 0 :(得分:1)

在第二个捕获组中,如果您正在寻找那些文字,则可以直接匹配b或c,不需要搜索任何字符

RewriteRule ^([^\/]+)/([b])/([^\/]+)/?$ ?channel=$1&b=$2&broadcast=$3 [L,QSA]
RewriteRule ^([^\/]+)/([c])/([^\/]+)/?$ ?channel=$1&c=$2&highlight=$3 [L,QSA]