.htaccess丢失查询字符串

时间:2013-07-02 09:42:28

标签: apache .htaccess mod-rewrite

我的.htaccess知识有限,我需要一些帮助。我需要做一些重定向来启用漂亮的网址。 在本地所有工作正常但它不在另一个开发服务器工作。显然,重定向时查询字符串会丢失。 我需要重定向此http://mysite.local/info/permalink/1

到这个http://mysite.local/info?proxy=true&id=1

我的.htaccess代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#remove /index.php from home url and redirect to root.
#http://mysite.local/index.php -> http://mysite.local/ 
RewriteCond %{THE_REQUEST} ^.*\/index\.php?\ HTTP/
RewriteRule ^(.*)index\.php?$ "/$1" [R=301,L,QSA]

#pretty url without index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [PT,QSA,L]

#rewrite to handle some permalink saved on my db.
#http://mysite.local/info/permalink/1
#http://mysite.local/info/proxy=true&id=1
RewriteRule ^([^/]+)/info/([a-zA-Z0-9\-]+)/([0-9]+) /info/?proxy=true&id=$3 [L]
</IfModule>

重定向正在运行,但查询字符串不存在。当我在info模块上运行var_dump($_GET)时,我得到一个空数组array(0) {} 我试着解决改变

RewriteRule .* index.php [PT,QSA,L]

RewriteRule ^(.*)$ /%{QUERY_STRING} [L]

RewriteRule ^([^/]+)/info/([a-zA-Z0-9\-]+)/([0-9]+) /info/?proxy=true&idobj=$3 [L]

RewriteRule ^([^/]+)/info/([a-zA-Z0-9\-]+)/([0-9]+) /info/?proxy=true&idobj=$3 [QSA,NE,L]

服务器API是CGI / FastCGI

我应该更改哪些内容以确保我的重写符合预期,$_GET变量仍可访问? thx提前

1 个答案:

答案 0 :(得分:1)

如果您要访问的网址为^([^/]+)/info,我不知道您是如何设法使用正则表达式模式的:/info/permalink/1

^([^/]+)/info模式意味着在URI的/info部分之前有东西,但没有。此外,在htaccess文件中,URI的前导斜杠被剥离。所以你可能想要这样的东西:

RewriteRule ^info/([a-zA-Z0-9\-]+)/([0-9]+) /info/?proxy=true&id=$2 [L]