更改RewriteRule以更改参数结果

时间:2014-09-15 15:20:54

标签: php .htaccess apache2

这是我的Apache 2目录配置:

<Directory /var/www/html/website/>
        Options +SymLinksIfOwnerMatch
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([^/]+)/([^/]+)/?$ index.php?operator=$1&url=$2 [L,QSA]
        RewriteRule ^([^/]+)/?$ index.php?operator=$1 [L,QSA]
</Directory>

如果我输入http://example.com/website/a/b,我会看到:?operator=a&url=b。这很好,是我所期待的 如果我输入http://example.com/website/a/,我会看到:?operator=a&url=。这也没关系。

我的问题是http://example.com/website/的结果。我看到的是?operator=index.php&url= 我希望看到两个参数都为空,但运算符填充了&#39; index.php&#39;。

我如何更改我的RewriteRule,以便参数都是空的,然后在我的示例中显示网站后面没有目录?

1 个答案:

答案 0 :(得分:0)

这是因为重写规则运行了两次,因为RewriteCond应用于下一个立即RewriteRule

将规则更改为:

<Directory /var/www/html/website/>
        Options +SymLinksIfOwnerMatch
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([^/]+)/([^/]+)/?$ index.php?operator=$1&url=$2 [L,QSA]

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([^/]+)/?$ index.php?operator=$1 [L,QSA]
</Directory>