在htaccess中使用RewriteCond后使用反向引用

时间:2016-10-18 18:17:14

标签: .htaccess mod-rewrite backreference

我有:

RewriteCond %{HTTP_HOST} ^my.domain.com$ [NC]
RewriteRule ^(.*)$ index.php?q=search&keyword=$1

输入:

my.domain.com/foo_bar

我想:

index.php?q=search&keyword=foo_bar

但事实上:

index.php?q=search&keyword=index.php

我不明白为什么。请帮帮我!

1 个答案:

答案 0 :(得分:1)

您的重写规则实际上是重写两次,一次用于/foo_bar,第二次用于index.php.*匹配任何内容。

您只需要添加2个条件来停止重写文件和目录:

# handle landing page
RewriteCond %{HTTP_HOST} ^my\.domain\.com$ [NC]
RewriteRule ^/?$ index.php?q=search [L,QSA]

# handle /foo_bar
RewriteCond %{HTTP_HOST} ^my\.domain\.com$ [NC]
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?q=search&keyword=$1 [L,QSA]