.htaccess URL重写帮助!

时间:2009-12-03 22:53:50

标签: php .htaccess mod-rewrite

我在我的小PHP框架中使用.htaccess和mod_rewrite。它工作得很好,但我想扩展它只是将所有内容重定向到index.php。

我的目录结构是这样的(显然简化)

apps
media
system
-- admin
jscript
templates

我目前的重写规则是:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

如您所见,“mydomain.com/url”的所有内容都被重定向到index.php。我现在想做的是允许任何'mydomain / admin /'指向'system'文件夹内的'admin'目录。我也希望在这个文件夹中有正常的条件,所以我不会使用干净的用户,而是使用像'mydomain.com/admin/some-kind-of-file.php'这样的网址。

简而言之,我只想让我的重写条件适用于除我的系统/管理文件夹之外的所有内容。

这可能吗?任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

只需在条件中添加admin,然后使用其他规则重定向:

RewriteCond $1 !^(index\.php|media|jscript|admin)/
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^admin/.* system/$0 [L]

答案 1 :(得分:1)

您的'media'和'jscript'文件夹似乎已经免于重写规则,您不能只添加'admin'文件夹吗?例如:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

如果你想将/ admin下的所有内容重定向到/ system / admin(也会在用户的浏览器中更新URL),你可以使用这样的mod_alias规则:

RedirectMatch permanent ^/admin/(.*)$ http://mysite.com/system/admin/$1

答案 2 :(得分:1)

首先将人员标题重定向到管理员文件夹,然后过滤其余部分,例如:

RewriteRule ^admin/([^/]*)$ system/$1 [L,QSA]

RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

答案 3 :(得分:1)

如果网址不以site.com/index.phpsite.com/mediasite.com/jscript开头,则以下内容仅适用于RewriteRule。


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

我会说实话,直到现在我还没有看到$1中使用的RewriteCond,但看起来很有趣。

那么如果你的网址是site.com/admin...怎么办?那么你需要一个新的RewriteRule。您还需要阻止以admin开头的网址被第一个RewriteRule重定向。


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin|system)
RewriteRule ^/?(.*)$ index.php/$1 [L,R]

RewriteRule ^/?(admin.*)$ system/$1 [L,R]

更新1 :将system添加到不应用于第一个RewriteRule的网址列表中。

更新2 :从第一个[L,QSA]删除RewriteRule并替换为[L,R]