使用内置的PHP 5.4服务器提供Drupal 7

时间:2012-07-11 12:18:39

标签: php drupal drupal-7 webserver

我希望使用PHP的内置服务器开发Drupal 7站点。我已成功运行Drupal而没有干净的URL(例如 index.php?q = / about / )但是干净的网址(例如 / about / )通常依赖于mod_rewrite或其等价物。在文档中,我看到你可以运行带有路由器文件的PHP服务器,如下所示:

php -S localhost:8000 routing.php

我应该在routing.php中添加什么来模拟mod_rewrite?

3 个答案:

答案 0 :(得分:7)

该任务基本上是用PHP编写Drupal的.htaccess for router.php文件。

这是一个开始:

<?php

if (preg_match("/\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)/", $_SERVER["REQUEST_URI"])) {
  print "Error\n"; // File type is not allowed
} else
if (preg_match("/(^|\/)\./", $_SERVER["REQUEST_URI"])) {
  return false; // Serve the request as-is
} else
if (file_exists($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) {
  return false;
} else {
  // Feed everything else to Drupal via the "q" GET variable.
  $_GET["q"]=$_SERVER["REQUEST_URI"];
  include("index.php");
}

这应该被视为alpha质量。它表示通过Drupal 7.14的.htaccess文件步行3分钟,跳过需要超过10秒钟思考的任何内容。 :)

然而,它确实允许我启动Drupal的安装脚本,样式表,JS和图像按预期加载,并使用Clean URL命中Drupal的页面。请注意,要在此环境中安装 Drupal,我需要a patch,这可能不会成为Drupal 7的一部分。

答案 1 :(得分:3)

我一直在寻找解决方案,我在Drupal 8 issues中找到了一个解决方案:

现在在我现有的Drupal 7安装中,这对我很有用:

将此保存为.htrouter.php(或任何您想要的)并在您的Drupal根目录中运行:

php -S localhost:8080 .htrouter.php

<?php
/**
 * @file
 * The router.php for clean-urls when use PHP 5.4.0 built in webserver.
 *
 * Usage:
 *
 * php -S localhost:8888 .htrouter.php
 *
 */
$url = parse_url($_SERVER["REQUEST_URI"]);
if (file_exists('.' . $url['path'])) {
  // Serve the requested resource as-is.
  return FALSE;
}
// Remove opener slash.
$_GET['q'] = substr($url['path'], 1);
include 'index.php';

(从https://drupal.org/files/router-1543858-3.patch建立的代码段)

答案 2 :(得分:3)

现在可以使用以下命令更轻松地启动服务器:

drush runserver