如何忽略mod_rewrite中的目录?
我试图让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 /
目录,以便所有请求都直接传递到该文件夹?
更新:
明确点:
- 它托管在Dreamhost上
- 文件夹在wordpress目录中
- / vip /文件夹包含一个webdav .htaccess等(尽管我不认为这很重要
解决方案
我不确定我是否理解目标,但是以下内容可能会?
RewriteRule ^/vip/(.*)$ /?%{QUERY_STRING} [L]
这将导致不使用/ vip重写诸如http://www.example.com/vip/fred.html之类的URL。
尝试将此规则放在其他任何规则之前。
RewriteRule ^vip - [L,NC]
它将匹配任何以vip
开头的URI。
- "-"表示什么都不做。
- " L"表示这应该是最后一条规则;忽略下面的所有内容。
- " NC"表示不区分大小写(因此也匹配" VIP")。
注意,它匹配任何以vip
开头的东西。表达式" ^ vip $"将匹配" vip",但不匹配" vip /"或者" vip / index.html"。 " $"可能是失败原因。如果我们确实想正确执行操作,则可能要使用^ vip(/ | $)
,以便与vip-page.html
不匹配。
我们提到我们要忽略的目录中已经有一个.htaccess文件,可以使用
RewriteEngine off
在该.htaccess文件中停止使用mod_rewrite(不知道是否在该文件夹中使用了mod_rewrite,如果这样,那将无济于事,因为我们无法将其关闭)。
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
这表示如果它是现有文件或者目录,请不要触摸它。我们应该能够访问site.com/vip,并且不会发生任何重写规则。
我已经使用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,
总之,最终的解决方案是:
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,我希望我的网站上还会有许多其他内容。