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

velaa5lx  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(113)

我的.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]

字符串

6fe3ivhb

6fe3ivhb1#

请在尝试其他规则之前先尝试此规则:

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

字符串
这将结束重写过程。

o7jaxewo

o7jaxewo2#

您还可以将包含以下内容的.htaccess文件

RewriteEngine Off

字符串
在您要排除重写的文件夹中(根据树中较高位置的.htaccess文件中的规则)。简单但有效。

axkjgtzd

axkjgtzd3#

添加一个条件来检查admin目录,类似于:

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]

字符串

t40tm48m

t40tm48m4#

我们使用以下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-folder目录中资源的请求。我们使用(.*)捕获组将用户转移到他们请求的确切资源,然后在新URL中包含$1。注意空间。

7vhp5slm

7vhp5slm5#

如果你想从规则中删除一个特定的目录(意思是,你想删除目录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**。

p3rjfoxz

p3rjfoxz6#

RewriteEngine On

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

字符串

相关问题