我正在尝试让modrewrite规则跳过目录vip
。我已经尝试了很多东西,你可以在下面看到,但无济于事。
# 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
如何让modrewrite完全忽略/vip/
目录,以便所有请求直接传递到文件夹?
为清楚起见:
答案 0 :(得分:127)
尝试将其放在任何其他规则之前。
RewriteRule ^vip - [L,NC]
它将匹配任何以vip
开头的URI。
-
意味着什么都不做。 L
表示这应该是最后一条规则;忽略以下一切。 NC
表示无案例(因此“VIP”也匹配)。请注意,它匹配任何开头 vip
。表达式^vip$
将与vip
匹配,但不会与vip/
或vip/index.html
匹配。 $
可能是你的垮台。如果你真的想要做得对,你可能想要^vip(/|$)
,所以你不匹配vip-page.html
答案 1 :(得分:14)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这表示如果是现有文件或目录,请不要触摸它。您应该能够访问site.com/vip,并且不应执行重写规则。
答案 2 :(得分:10)
您要添加的代码,以及提供重写规则/条件的所有答案都是无用的!默认的WordPress代码已经完成了您应该需要的所有内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
这些行说&#34;如果它不是现有文件(-f
)或目录(-d
),则将其传递给WordPress。添加额外的规则,无论它们具体或有多好,都是多余的 - 您应该已经被WordPress规则所涵盖了!
那他们为什么不工作?
.htaccess
目录中的vip
抛出错误。如果密码保护目录,则会发生完全相同的事情。
以下是解决方案:
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
在WordPress代码之前插入这些行,然后创建/err.txt。这样,当它出现在WebDAV(或受密码保护的目录)上并失败时,它将转到该文件,并被现有的默认WordPress条件(RewriteCond %{REQUEST_FILENAME} !-f
)捕获。
答案 3 :(得分: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,我希望其他人在my site上有这个问题。
答案 4 :(得分:8)
您提到您已经在要忽略的目录中有.htaccess文件 - 您可以使用
RewriteEngine off
在那个.htaccess中停止使用mod_rewrite(不确定你是否在该文件夹中使用mod_rewrite,如果那样你将无法解决,因为你无法将其关闭)。
答案 5 :(得分:6)
尝试替换代码的这一部分:
RewriteRule ^vip/.$ - [PT]
......以下内容:
RewriteCond %{REQUEST_URI} !(vip) [NC]
这应该解决问题。
答案 6 :(得分:4)
RewriteCond %{REQUEST_URI} !^pilot/
是这样做的方法。
答案 7 :(得分: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,
答案 8 :(得分:3)
这有效......
RewriteRule ^vip - [L,NC]
但确保它是
之后的第一条规则上的RewriteEngine
即。
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
答案 9 :(得分:2)
在我的情况下, brentonstrine 的答案(我看到 matdumsa 也有同样的想法)是正确的...我想投票他们的答案,但在这里是新的,我没有“声誉”,所以我必须写一个完整的答案,以强调我认为真正的关键在这里。
其中一些答案会成功阻止WordPress index.php的使用......但在很多情况下,这样做的原因是有一个真实的目录,其中包含您要直接显示的真实页面,和
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
线已经解决了这个问题,所以这些解决方案中的大部分都是像我这样的情况分散注意力。
关键是 brentonstrine的洞察,该错误是次要影响,由我试图直接显示的目录中的密码保护引起。通过加入
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
行和创建错误页面(我实际上创建了err401.html和err403.html并提供了更多信息性错误消息)当找不到要显示的任何页面需要401 Authentication时,我停止生成404响应,然后该文件夹按预期工作...显示一个apache登录对话框,然后是文件夹的内容,或者失败,我的错误401页面。
答案 10 :(得分:-1)
我不确定我是否理解你的目标,但以下可能会做你想要的事情?
RewriteRule ^/vip/(.*)$ /$1?%{QUERY_STRING} [L]
这将导致在没有/ vip的情况下重写http://www.example.com/vip/fred.html等URL。