13

我正在寻找使用 PHP 的内置服务器开发 Drupal 7 站点。我已经成功运行了 Drupal,但没有干净的 url(例如index.php?q=/about/),但干净的 url(例如/about/)通常依赖于 mod_rewrite 或其等效项。在文档中,我看到您可以使用路由器文件运行 PHP 服务器,如下所示:

php -S localhost:8000 routing.php

我应该在 routing.php 中放入什么来模拟 mod_rewrite?

4

3 回答 3

7

任务基本上是在 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");
}

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

但是,它确实允许我启动 Drupal 的安装脚本,按预期加载样式表、JS 和图像,并使用 Clean URLs 访问 Drupal 的页面。请注意,要在此环境中安装Drupal,我需要一个可能不会成为 Drupal 7 一部分的补丁。

于 2012-07-11T18:10:27.613 回答
3

我自己在寻找解决方案,我在Drupal 8 问题中找到了一个:

现在在我现有的 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构建的片段)

于 2013-07-23T01:57:31.317 回答
3

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

drush runserver

于 2014-12-16T13:54:30.540 回答