在Drupal的多站点configuration与mod_rewrite和干净的url冒险

我工作的大学计划提供Drupal托pipe给想要Drupal站点的职员/教员。 我们已经build立了干净的网站Drupal多站点,它主要工作,除了一些奇怪的redirect。 如果你有两个站点,一个是另一个的子串,那么你将被随机地redirect到另一个站点。 我跟踪了如何mod_rewritepath匹配的问题,所以这样的configuration文件:

RewriteCond %{REQUEST_URI} ^/drupal RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /drupal/index.php?q=$1 [last,qsappend] RewriteCond %{REQUEST_URI} ^/drupaltest RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /drupaltest/index.php?q=$1 [last,qsappend] 

/ drupaltest将匹配/ drupal行,并且/ drupaltest页面上的所有链接将被重写为指向/ drupal。

如果在每个重写条件的末尾放置string字符($)的末尾,那么它总是在正确的位置上匹配,并且链接将始终正确地重写。 一旦用户login,就会崩溃,因为查询string被追加到url,所以只有基本的URL不再匹配。

您还可以通过在configuration文件中排列网站来解决问题,以便最小的子string始终保持最后。 我build议将所有站点存储在一个表中,然后在每次请求Drupal站点时查询,sorting和重写configuration文件,以便我们保证顺序。 系统pipe理员认为这很糟糕,没有解决根本问题。

禁用干净的URL也应该解决这个问题,但用户真的想要他们,所以我宁愿保持他们,如果可能的话。 我认为我们也可以通过在每个站点中使用.htaccess文件来解决这个问题,以处理干净的URL重写,但这似乎也不是最理想的,因为它会在服务器上产生更高的负载,而服务器旨在承载大学的大部分外部面对networking内容。

是否有一些我可以用mod_rewrite来实现它的魔法? 另一个解决scheme会更好吗? 我做了一些错误的方式吗?

这似乎工作:

 RewriteCond %{REQUEST_URI}/ ^/drupal/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /drupal/index.php?q=$1 [last,qsappend] RewriteCond %{REQUEST_URI}/ ^/drupaltest/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /drupaltest/index.php?q=$1 [last,qsappend] 

感谢所有看着它的人​​。