使用内置PHP5.4服务器为Drupal7提供服务

使用内置PHP5.4服务器为Drupal7提供服务,php,drupal,drupal-7,webserver,Php,Drupal,Drupal 7,Webserver,我希望使用PHP的内置服务器开发Drupal7站点。我已经成功地在没有干净的URL(例如index.php?q=/about/)的情况下运行了Drupal,但是干净的URL(例如/about/)通常依赖于mod_rewrite或其等价物。在我看到的文档中,您可以使用路由器文件运行PHP服务器,如下所示: php -S localhost:8000 routing.php 我应该在routing.php中添加什么来模拟mod_rewrite?任务基本上是用php为您的router.php文件编码

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

php -S localhost:8000 routing.php

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

任务基本上是用php为您的
router.php
文件编码Drupal的.htaccess

这是一个开始:

<?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");
}

我自己也在寻找解决方案,我在以下网站中找到了一个:

现在,在我现有的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';

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


drush runserver

+1了解一个有趣的问题。但由于这是该站点的开发人员副本,您真的需要干净的URL吗?(我假设它是该站点的开发人员副本……您不应该将PHP的内置服务器用于实时系统!——请参阅)是的,仅适用于开发人员。我使用Nginx和PHP-FPM进行部署。我偶尔也会做一个WordPress站点,它也会有同样的问题。在你的开发站点上设置nginx和phpfpm有什么不对?这应该需要大约五分钟。@MichaelHampton-这可能也行,但这不是问题所在。@MichaelHampton-最小的设置使跨计算机/虚拟机工作变得更容易。另外,上次我检查的时候,PHP-FPM在Windows上不起作用,看起来很不错。您应该提交一个补丁以将其包含在Drupal中。在正常请求中,脚本名称为index.php,这意味着最后一条else语句将永远不会执行。@JasonChrista-是。如果我们正在处理对
index.php?q=admin
的请求,我们可能不想继续。我没有看到什么吗?我的意思是,脚本名中填充了
index.php
,请求URL,如
/about/
。另一个奇怪的是,弹出的管理员只显示管理员的首页,而不显示任何子页面。不过,去
/admin/
工作很好。这是唯一对我有效的答案
drush
必须是指向
drush.phar
的别名或符号链接,否则会出现无法在phar中找到文件的错误。