.htaccess重写规则不会追加查询字符串的路径

时间:2013-08-17 14:15:31

标签: apache .htaccess rewrite query-string

我正在尝试编写一个htaccess文件,但我无法让它正常工作。我的网站上有一个名为'gpio'的目录。我正在编写的htaccess文件位于/ var / www / gpio中。

当有人请求网址http://domain.com/gpio时,我希望将请求重定向到脚本,并在查询字符串后附加“gpio”。这就是我在htaccess文件中的内容:

# .htaccess
#DirectoryIndex index.html
RewriteEngine on

# I changed domain name a few months ago...
RewriteCond %{HTTP_HOST} ^olddomain.com/*$
RewriteRule ^(.*)$ http://newdomain.com/$1 [R=301,L]

# handle the case where the directory exists
RewriteCond %{REQUEST_FILENAME} -d
# this is the part that doesn't work
RewriteRule ^(.*)$ /cgi-bin/pyindex.cgi?q=$1 [L,QSA]

# handle the case where a file is requested
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /cgi-bin/pyindex.cgi?q=$1 [L,QSA]

问题在于,当我访问此URL时,我被重定向到脚本,但请求的路径不会附加到查询字符串。在pyindex.cgi中,当打印查询字符串时,它只包含'q ='。最终的结果是,当我看到一个代表一类帖子的页面时,我正在看到我的主页。

任何关于我做错事的想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

要么在/var/www/.htaccess内有该规则,要么将其修改为

RewriteRule ^$ /cgi-bin/pyindex.cgi?q=gpio [L,QSA]
RewriteRule ^(.+)/?$ /cgi-bin/pyindex.cgi?q=gpio/$1 [L,QSA]

并且,以下规则测试请求是否一个文件(因此也匹配目录)

RewriteCond %{REQUEST_FILENAME} !-f  # remove ! to match files