我正在尝试编写一个htaccess规则,将所有内容重定向到/ admin,除非是/ users / *
这是我到目前为止所拥有的,但是有一个重定向循环,我无法找出原因:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/admin [NC]
RewriteCond %{REQUEST_URI} !^/users [NC]
RewriteRule ^(.*)$ /admin [R=301,L,NC]
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteRule ^sitemap.xml$ /sitemap [L,P]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 0 :(得分:0)
问题是你在这些条件之间使用了OR:
func createCategory() {
let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
let category = Category(entity: entity!, insertIntoManagedObjectContext: context)
category.name = name.text
category.descript = descriptionField.text
let index = pickerView.selectedRowInComponent(0)
let color = categoryColor[index]
category.color = color // (assuming color is a String)
println(category.name)
context?.save(nil)
}
答案 1 :(得分:0)
您有几个问题,首先需要从第一个RewriteCond
中删除OR,因为它会尝试匹配这两个规则并从两个结尾删除$
。
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/admin [NC]
RewriteCond %{REQUEST_URI} !^/users [NC]
RewriteRule ^(.*)$ /users [R=301,L,NC]
作为一个目录,REQUEST_URI
将/users/
而不是/users
,$告诉它这是REQUEST_URI字符串的结尾,使其完全匹配。
另外,作为301重定向,一些浏览器可能会缓存此重定向(Firefox在我的电脑上执行但Chrome没有),这使得调试变得更加困难。
答案 2 :(得分:0)
使用THE_REQUEST
变量代替REQUEST_URI
,因为REQUEST_URI
的值将更改为index.php
您的上一条规则,这将使此规则再次触发:
RewriteCond %{THE_REQUEST} !\s/+(users|admin)[/\s?] [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /admin [R=301,L]
确保清除浏览器缓存。