我发现(至少在我的托管服务上)没有必要重命名冲突的目录。您需要为希望WordPress处理的每个页面创建一个例外,大致如下:
RewriteCond %{REQUEST_FILENAME} /labs/$ [OR]
RewriteCond %{REQUEST_FILENAME} /page2/$ [OR]
RewriteCond %{REQUEST_FILENAME} /page2/page3/$
RewriteRule . /index.php [L]
这些规则基本上告诉服务器将以这些名称的目录结尾的任何请求传递到/索引。php是WordPress的主脚本。(假设WP位于根目录中)。为了防止匹配任何以/labs/等结尾的URL,有必要使用足够多的路径名来限定条件,以使它们唯一。此处必须使用服务器路径,因为我正在与%{REQUEST\\u FILENAME}进行匹配。我想%{REQUEST\\u URI}会允许您匹配URL,但我还没有尝试过。所以每种情况都变成
RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR]
此外,除了最后一行之外,您还需要在每一行的末尾都有一个[或]选项。
然后,我在WordPress创建的用于检查目录或文件是否存在的重写规则之前插入了这些行。以下是最后一套规则:
# Modified WP rewrites
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR]
RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/$ [OR]
RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/page3/$
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
</IfModule>
请注意,我删除了#BEGIN WordPress注释。然后我做了我的。htaccess文件不可写,以防止WordPress重新添加其规则。不过,我认为这些步骤没有必要。如果您将新规则放在#BEGIN WordPress注释上方,并将其包装在其他行中以打开重写引擎,我认为它们仍然可以工作,但我尚未测试该配置。
我刚刚将我的旧静态HTML站点迁移到WordPress,并试图将所有可下载文件保存在原始目录中,以及它们所属的页面。此设置使其成为可能。
希望这对别人有帮助!
(附:关于降价语法的帮助页在哪里?我找了大约15分钟,没有找到它…)