0

我的.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>

重定向有效,但查询字符串不存在。当我var_dump($_GET)在 info 模块上运行时,我得到一个空数组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变量仍然可以访问?提前谢谢

4

1 回答 1

1

我不知道你是如何设法让它与正则表达式模式一起工作的:^([^/]+)/info如果你要访问的 URL 是/info/permalink/1.

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

RewriteRule ^info/([a-zA-Z0-9\-]+)/([0-9]+) /info/?proxy=true&id=$2 [L]
于 2013-07-02T10:07:56.133 回答