我的应用程序位于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]
答案 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