在我的一个项目中,我尝试使用.htaccess进行重定向。我使用的是这样的重定向:
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]但是,现在我想在重写规则中添加一个例外。我希望http://example.com/admin/以相同的方式重定向,只是重定向到不同的目录。所有其他流量仍应转到公共目录。所以我添加了一个重写条件,如下所示:
RewriteCond %{REQUEST_URI} !/admin/
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]这并没有起到作用。我仍然被重定向到公用文件夹。我还尝试了这个:
RewriteRule ^admin$ admin/ [L]
RewriteRule admin(.*) admin/$1 [L]
RewriteCond %{REQUEST_URI} !/admin
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]这只会让事情变得更糟。我现在收到一个500内部服务器错误。
我已经搜索了几个小时了,我已经厌倦了寻找示例,这些示例展示了如何为某个文件夹添加异常,但没有显示如何将此流量重定向到另一个文件夹。你能告诉我我做错了什么吗,或者我可以尝试其他方法?
发布于 2012-04-12 21:44:30
RewriteCond仅适用于其正下方的规则。换句话说,在您的示例中,它只应用于空路径规则。将RewriteCond向下移动一个档次,它会工作得更好。
RewriteRule ^$ public/ [L]
RewriteCond %{REQUEST_URI} !/admin/
RewriteRule (.*) public/$1 [L]另外,我发现你的规则
RewriteRule admin(.*) admin/$1 [L]有点奇怪。像/adminsomething这样的网址将被重写为/admin/something,我认为这不是您想要的。
此外,我有一种预感,你把重写和重定向搞混了。重写是使请求在内部重写并以不同方式解释的规则。重定向是一种规则,它将告诉访问者的浏览器转到不同的地址。你要选哪一个?
重定向的神奇关键字是R=301,意思是永久移动http代码301的重定向。例如,您可能想要尝试...
# This first rule is actually redundant in this case so skip it...
#RewriteRule ^$ public/ [R=301,L]
RewriteCond %{REQUEST_URI} !/admin
RewriteRule (.*) public/$1 [R=301,L]https://stackoverflow.com/questions/10124538
复制相似问题