mod_rewrite中有多个可选的不同参数

时间:2014-07-01 14:59:46

标签: php .htaccess mod-rewrite

我陷入了一条非常复杂的规则,我正试图完成。 我有4个不同的可选参数,以不同的形式显示。

我一直在使用一套非常长的规则但是我发现它无法使用多个参数。

到目前为止我的代码是这样的。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^library/from/([0-9]+)$ library.php?year=$1
RewriteRule ^library/upto/([0-9]+)$ library.php?year2=$1
RewriteRule ^library/([0-9]+)-([0-9]+)$ library.php?year=$1&year2=$2
RewriteRule ^library/query=(.*)$ library.php?query=$1
RewriteRule ^library/([a-z-]+)$ library.php?category=$1
RewriteRule ^library/([a-z-]+)?/([0-9]+)-([0-9]+)?/query=(.*)?$ library.php?category=$1&year=$2&year2=$3&query=$4

年份部分有3个不同的集合。它的2个变量和3个输出,缺少其中一个。 有没有办法解决它或清理它并使用更聪明的方法? 编辑。它正在使用所有4个参数。

提前致谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^library/from/([0-9]+)/?$ library.php?year=$1 [L,QSA]
RewriteRule ^library/upto/([0-9]+)/?$ library.php?year2=$1 [L,QSA]
RewriteRule ^library/([0-9]+)-([0-9]+)/?$ library.php?year=$1&year2=$2 [L,QSA]
RewriteRule ^library/query=(.+)$ library.php?query=$1 [L,QSA]
RewriteRule ^library/([a-z-]+)/?$ library.php?category=$1 [L,QSA]
RewriteRule ^library/([a-z-]+)/([0-9]+)-([0-9]+)?/query=(.+)$ library.php?category=$1&year=$2&year2=$3&query=$4 [L,QSA]