我的.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提前
答案 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]