在文件夹之间内部重写URL,index.php除外

时间:2012-12-30 11:53:05

标签: apache .htaccess mod-rewrite

我有两个文件夹:

/forum/admin
/forum/adminhide

我想在论坛文件夹中有一个.htaccess文件,它会在内部重写/ admin上的index.php以及/ adminhide。

示例:

http://website.com/forum/admin/index.php -> don't do anything
http://website.com/forum/admin/image.png -> internal rewrite to http://website.com/forum/adminhide/image.png

到目前为止,我所有的尝试都只产生了服务器内部错误。

1 个答案:

答案 0 :(得分:1)

这可能有效(在根级.htaccess文件中):

RewriteRule ^forum/admin/index\.php$ - [S=1]
RewriteRule ^forum/admin/(.*) forum/adminhide/$1

不会重写与第一个规则匹配的任何URL(因为替换具有魔术值-),并且[S=1]标志会导致跳过下一个规则(执行实际重写)如果第一条规则匹配。

请注意,这非常按字面解释您的要求:forum/admin/开头的每个网址路径都会被重写,forum/admin/index.php除外。您可能更愿意将第一条规则更改为更宽松的内容,例如:

RewriteRule ^forum/admin/(index\.php(/.*)?)?$ - [S=1]

这也会匹配(因此从重写中排除)网址路径forum/admin/forum/admin/index.php/whatever


修改:如果要将.htaccess文件放在forum文件夹中,只需从规则中删除初始forum/并设置RewriteBase适当地改为:

RewriteBase /forum/

RewriteRule ^admin/index\.php$ - [S=1]
RewriteRule ^admin/(.*) adminhide/$1