74

I'm trying to have the modrewrite rules skip the directory vip. I've tried a number of things as you can see below, but to no avail.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteRule ^vip$ - [PT]
RewriteRule ^vip/.$ - [PT]
#RewriteCond %{REQUEST_URI} !/vip 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

How do I get modrewrite to entirely ignore the /vip/ directory so that all requests pass directly to the folder?

Update:

As points of clarity:

  • It's hosted on Dreamhost
  • The folders are within a wordpress directory
  • the /vip/ folder contains a webdav .htaccess etc (though I dont think this is important
4

11 回答 11

135

试着把它放在任何其他规则之前。

RewriteRule ^vip - [L,NC] 

它将匹配任何以 URI 开头的 URI vip

  • -手段无所作为。
  • L应该是最后的规则;忽略后面的一切。
  • 表示没有案例(因此NC“VIP”也匹配)。

请注意,它匹配任何开头 vip的内容。表达式^vip$将匹配vip但不匹配vip/or vip/index.html。这$可能是你的垮台。如果你真的想把它做对,你可能想去,^vip(/|$)所以你不匹配vip-page.html

于 2008-10-02T17:22:50.110 回答
14
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这表示如果它是现有文件或目录,请不要触摸它。您应该能够访问 site.com/vip 并且不应该发生重写规则。

于 2008-11-07T21:32:06.527 回答
10

您正在添加的代码以及提供重写规则/条件的所有答案都是无用的!默认的 WordPress 代码已经完成了您需要的所有操作:

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

这些行说“如果它不是现有文件 ( -f) 或目录 ( -d),则将其传递给 WordPress。添加额外的规则,无论它们多么具体或好,都是多余的——你应该已经被 WordPress 规则所涵盖!

那他们为什么不工作???

.htaccess目录中的vip引发错误。如果您使用密码保护目录,则会发生完全相同的事情。

这是解决方案:

ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt

在 WordPress 代码之前插入这些行,然后创建 /err.txt。这样,当它遇到您的 WebDAV(或受密码保护的目录)并失败时,它将转到该文件,并被现有的默认 WordPress 条件 ( RewriteCond %{REQUEST_FILENAME} !-f) 捕获。

于 2013-08-09T23:27:45.553 回答
9

总之,最终的解决方案是:

ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

我在我的具体情况下发布了更多关于这个问题的原因,涉及 Dreamhost 上的 Wordpress 和 WebDAV,我希望我的网站上还有很多其他人。

于 2010-08-08T17:35:33.660 回答
8

您提到您在要忽略的目录中已经有一个 .htaccess 文件 - 您可以使用

RewriteEngine off

在那个 .htaccess 中停止使用 mod_rewrite (不确定您是否在该文件夹中使用 mod_rewrite,如果您是,那将无济于事,因为您无法将其关闭)。

于 2008-10-02T18:31:22.550 回答
7

尝试替换这部分代码:

重写规则 ^vip/.$ - [PT]

...具有以下内容:

RewriteCond %{REQUEST_URI} !(vip) [NC]

那应该可以解决问题。

于 2013-06-11T06:55:12.627 回答
4
RewriteCond %{REQUEST_URI} !^pilot/ 

是这样做的方法。

于 2012-11-29T20:03:35.100 回答
3

就我而言,brentonsrine的答案(我看到matdumsa也有同样的想法)是正确的……我想对他们的答案进行投票,但是作为新来的,我没有“声誉”,所以我有写一个完整的答案,以强调我认为这里真正的关键。

其中一些答案将成功阻止 WordPress index.php 被使用......但在许多情况下,这样做的原因是有一个真实的目录,其中包含您想要直接显示的真实页面,并且

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

生产线已经解决了这个问题,所以在像我这样的情况下,这些解决方案中的大多数都会分散注意力。

关键是brentonsrine认为错误是次要影响,是由我试图直接显示的目录中的密码保护引起的。通过放入

ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt

行并创建错误页面(我实际上创建了 err401.html 和 err403.html 并提供了更多信息性错误消息)当它找不到任何页面以显示需要 401 身份验证时,我停止生成 404 响应,然后文件夹工作正如预期的那样......显示一个apache登录对话框,然后是文件夹的内容,或者失败时,我的错误401页面。

于 2014-10-21T23:02:51.727 回答
3

我在使用 wordpress 时遇到了同样的问题,发现该问题与没有适当的 401 和 403 错误处理程序有关。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这些条件应该不会重写现有文件夹的 url,但它们不会为受密码保护的文件夹完成工作。就我而言,将以下两行添加到我的根 .htaccess 解决了问题:

ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html

当然你需要创建/misc/myerror.html,

于 2010-04-19T01:31:12.110 回答
3

这有效...

RewriteRule ^vip - [L,NC]

但确保这是之后的第一条规则

重写引擎开启

IE

ErrorDocument 404 /page-not-found.html

RewriteEngine on

RewriteRule ^vip - [L,NC]

AddType application/x-httpd-php .html .htm

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

etc
于 2011-02-27T22:51:08.320 回答
-1

我不确定我是否理解您的目标,但以下内容可能会满足您的需求?

RewriteRule ^/vip/(.*)$   /$1?%{QUERY_STRING} [L]

这将导致在没有 /vip 的情况下重写诸如http://www.example.com/vip/fred.html之类的 URL。

于 2008-10-02T16:49:44.713 回答