0

目前,我正在迁移一个站点,由于时间限制,我们已将大部分迁移到 CMS (Drupal),但仍有一些平面 HTML 子站点需要在此之外提供服务。

现在,配置方面,我已经设置 Apache 来传递对确实存在并直接获得服务的文件的请求,而不是将请求发送到 CMS:

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

随着我们有更多的时间,团队希望慢慢地从文件系统中导入我们从 CMS 中遗漏的页面,但是一旦我们完成,我们就无法轻松地从文件系统中删除这些额外的文件将它们导入 Drupal(不幸的是,服务提供商部署方法 - 所以不可更改)。

我们使用与旧站点相同的 URL(维护旧链接/地址等),因此一旦我们在 CMS 中重新创建了页面,上述重写规则仍将从文件系统提供页面。

为了解决这个问题,我想做的是使用 mod_rewrite 通过 Drupal 路由所有请求,然后如果 Drupal 抛出 404,尝试从文件系统中提取 URL,而不是我们目前拥有的,即文件是否存在,自动送达。从一天左右的搜索开始,我找不到实现这一目标的方法,甚至找不到很多人实际上之前遇到过这个问题。

自然,如果我可以完全控制我们的环境,那么一旦底层文件被迁移就可以很容易地删除它们,但在这种情况下就不是那么简单了。

我也明白这样做会产生开销,但鉴于这仅适用于网站的一小部分,我将评估任何解决方案,看看它是否是一个可以接受的折衷方案。

有什么想法吗?

4

1 回答 1

0

您能否添加一个 RewriteCond,它会在您在那里检查特定路径并将它们直接发送到 index.php 之前启动?

就像是

RewriteRule ^/some/path/to/file.html$ index.php [L]

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

如果你有很多不同的路径,它可能会变得有点笨拙,如果你现有的静态文件有一个很好的正则表达式模式会更好

于 2013-11-10T23:30:03.413 回答