. htaccess mod_rewrite-如何从重写规则中排除目录

我有8行重写规则在我的。Htaccess 文件。我需要从这些规则中排除服务器上的两个物理目录,以便可以访问它们。现在,所有请求都发送到 index.php 文件。

要排除的目录: “ admin”和“ user”。

所以 http 请求: http://www.domain.com/admin/不应该被传递到 index.php 文件。

ErrorDocument 404 /index.php?mod=error404


Options  FollowSymLinks
RewriteEngine On
RewriteBase /


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]


RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]
249998 次浏览

添加一个条件来检查管理目录,比如:

RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]


RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]

在你的其他规则之前试试这个规则:

RewriteRule ^(admin|user)($|/) - [L]

这将结束重写过程。

你也可以放一个.htaccess 文件,其中包含

RewriteEngine Off

中的规则进行重写时,在要排除的文件夹中。Htaccess 文件,该文件位于树的较高位置)。简单但有效。

RewriteEngine On


RewriteRule ^(wordpress)($|/) - [L]

我们使用了以下 mod _ rewrite 规则:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/test/
RewriteCond %{REQUEST_URI} !^/my-folder/
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

这将(永久性地使用301重定向)所有到站点的流量重定向到 http://www.newdomain.com,除了对/test 和/my-file 目录中的资源的请求。我们通过使用(将用户传输到他们请求的确切资源。*)捕获组,然后在新的 URL 中包含 $1。注意空间。

如果要从规则中删除某个特定目录(即要删除目录 ) ,可以使用:

RewriteEngine on


RewriteCond %{REQUEST_URI} !^/foo/$
RewriteRule !index\.php$ /index.php [L]

上面的 rewriteRule 将把所有请求重写到 /index.php,不包括对 /foo/的请求。

要排除所有已存在的目录,您需要在规则之上使用以下条件:

RewriteCond %{REQUEST_FILENAME} !-d

以下规则

RewriteEngine on


RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !index\.php$ /index.php [L]

将所有内容(目录除外)重写到 /index.php