.htaccess与公用文件夹

时间:2010-06-03 03:36:05

标签: .htaccess mod-rewrite

我在localhost上有以下目录结构:

http://localhost/testing/

目录结构存在于测试内部,如下所示:

/testing/public
/testing/public/index.php
/testing/public/img
/testing/public/css
..etc for the js and swf directories

.htaccess文件位于测试文件夹中,内容如下:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /testing/

RewriteRule ^public$ public/ [R,QSA]
RewriteRule ^public/$ public/index.php?state=public [L,QSA]

RewriteRule ^stackoverflow$ stackoverflow/ [R,QSA]
RewriteRule ^stackoverflow/$ public/index.php?state=stackoverflow[L,QSA]

我正在使用PHP并且在/testing/public/index.php文件中我想测试$ _GET ['state']确实正在保存变量。

当我尝试测试时:

http://localhost/testing/public

$ _ GET ['state']根本找不到但是

http://localhost/testing/stackoverflow

的确反映出$ _GET ['state']等于'stackoverflow'。

我在这里失踪了什么?为什么我在第一个链接中无法获得state = public?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这在我的系统上工作正常,但我认为你遇到了一个与实际文件系统目录同名的重写规则而遇到麻烦。文件系统通常优先。因此,当您加载'/ testing / public'时,它只会加载/testing/public/index.php而不会运行您的规则。

尝试将规则更改为:

RewriteRule ^public_$ public_/ [R,QSA]
RewriteRule ^public_/$ public/index.php?state=public [L,QSA]

导航到'testing / public_',如果按预期打印出'public',那么你就会知道这是你的问题。