Htaccess:尝试将所有内容重定向到目录

时间:2015-09-25 13:46:37

标签: php regex .htaccess mod-rewrite

我正在尝试编写一个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>

3 个答案:

答案 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]

确保清除浏览器缓存。