我在我的小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'这样的网址。
简而言之,我只想让我的重写条件适用于除我的系统/管理文件夹之外的所有内容。
这可能吗?任何帮助将不胜感激!
答案 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.php
,site.com/media
或site.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]
。