带有可选参数的重写器

时间:2014-12-26 15:17:46

标签: .htaccess rewrite

这是我的.htaccess文件

..
RewriteRule ^songbook(?:/([a-z]))?/?$ music/songbook.php?char=$1 [L]

根据该规则,我可以使用以下网址:

http://www.example.com/songbook
http://www.example.com/songbook/

http://www.example.com/songbook/a
http://www.example.com/songbook/a/

到目前为止一切顺利。当我尝试在PHP中获取char时会出现问题,如下所示:

if (isset($_GET['char'])) {
   echo 'FOUND a char';

} else {
   echo 'there is NO char';
}

由于某种原因,它总是找到一个char,即使没有提供char也是如此。 我的重写规则说char是可选的,但我想我做错了。

我如何编写rewriterule以使char是可选的,以便PHP中的if条件有效?

由于

2 个答案:

答案 0 :(得分:1)

问题是你的重写规则总是在查询字符串中定义char,即使它是一个空字符串。 您有两种选择:

1-编辑你的php:

if (isset($_GET['char'])  &&  !empty($_GET['char'])) {
   echo 'FOUND a char';
} else {
   echo 'there is NO char';
}

2-编辑您的.htaccess

答案 1 :(得分:1)

您可以更改.htaccess:

RewriteRule ^songbook/?$ music/songbook.php [L]
RewriteRule ^songbook/([a-z])/?$ music/songbook.php?char=$1 [L]