mod_rewrite help - 将子目录转换为GET变量

时间:2012-03-13 23:08:58

标签: mod-rewrite

我的应用程序位于http://mysite.com/myapp。我想在/ myapp文件夹中放置一个htaccess文件,以便所有其他子目录都转换为GET变量。 E.g。

http://mysite.com/myapp => /myapp/index.php   # this is happening)
http://mysite.com/myapp/foo => index.php?sub=foo
http://mysite.com/myapp/bar/ => index.php?sub=bar/
http://mysite.com/myapp/foo/bar?baz=bop => index.php?sub=foo/bar&baz=bop

这不起作用:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(/.*)\?(.*) ./index.php?sub=$1&$2 [NC]

2 个答案:

答案 0 :(得分:0)

当然不是。 Just like the docs say,您无法在RewriteRule中找到查询字符串。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/.*)$ ./index.php?sub=$1 [NC,QSA]

答案 1 :(得分:0)

您的重写规则没有意义,因为RewriteRule不能直接使用查询字符串(意味着 - 它不是URL的一部分) - 它只适用于URL的路径部分(例如在{{ 1}}路径部分将为/foo/bar?baz=bop)。要匹配查询字符串,您必须使用/foo/bar

在你的情况下你甚至不需要这样做...因为你没有“完全修改/改变”现有的查询字符串..只需添加一点就可以了。

试试这段代码:

RewriteCond

1。 Options +FollowSymlinks RewriteEngine On RewriteRule ^(?!index\.php)(.*)$ index.php?sub=$1 [QSA,L] 告诉mod_rewrite将当前查询字符串附加到新查询字符串。

2。此规则排除了对QSA文件的请求,以防止无限重定向循环。

修改

3。此规则(以及您自己的尝试)将重写对任何URL的请求,包括任何现有文件(例如图像,CSS等)。要绕过这个“限制”(我用你的例子写的),在RewriteRule行之前添加这些行:

index.php