我的.htaccess文件中有8行重写规则。我需要从这些规则中排除服务器上的两个物理目录,以便它们可以访问。现在所有请求都发送到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]
答案 0 :(得分:262)
在您的其他规则之前尝试此规则:
RewriteRule ^(admin|user)($|/) - [L]
这将结束重写过程。
答案 1 :(得分:97)
你还可以做一个包含
的.htaccess文件RewriteEngine Off
在要重写的文件夹中(通过树中较高的.htaccess文件中的规则)。简单但有效。
答案 2 :(得分:22)
添加条件以检查管理目录,例如:
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]
答案 3 :(得分:4)
RewriteEngine On
RewriteRule ^(wordpress)($|/) - [L]
答案 4 :(得分:4)
我们使用了以下mod_rewrite规则:
重写发动机 RewriteCond%{REQUEST_URI}!^ / test /
RewriteCond%{REQUEST_URI}!^ / my-folder /
RewriteRule(。*)http://www.newdomain.com/ $ 1 [R = 301,L]
除了对/ test和/ my-folder目录中的资源的请求外,这会将(到301重定向)的所有流量重定向到http://www.newdomain.com。我们使用(。*)捕获组将用户转移到他们请求的确切资源,然后在新URL中包含$ 1。注意空间。
答案 5 :(得分:3)
如果要从规则中删除特定目录(意味着,您要删除目录 foo ),可以使用:
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 。