Drupal 7 重写不使用 .htaccess

Posted

技术标签:

【中文标题】Drupal 7 重写不使用 .htaccess【英文标题】:Drupal 7 rewrite not using .htaccess 【发布时间】:2013-03-06 23:45:31 【问题描述】:

我正在尝试在不使用 .htaccess 文件的情况下启用 drupal 7 中的重写功能,因为只有在您没有对服务器的 root 访问权限时才应该使用它(根据 apache 的网站)

废话不多说,这是我的配置

<VirtualHost *:80>
  ServerName  www.example.com
  ServerAlias example.com

  DirectoryIndex index.php
  DocumentRoot /var/www/example.com/public

  ErrorDocument 404 /index.php

  LogLevel warn
  ErrorLog  /var/www/example.com/log/error.log
  CustomLog /var/www/example.com/log/access.log combined

  <Directory "/var/www/example.com/public">
    Options -Indexes +FollowSymLinks +ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all

    RewriteEngine on

    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_URI !=/favicon.ico
    RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
  </Directory>
</VirtualHost>

当我将它放在 .htaccess 文件中时,重写配置有效,但当我将它放在 vhost 文件中时却没有。

你们能看出这里有什么不对吗?

【问题讨论】:

【参考方案1】:

我认为您的重写规则不应包含 '/' 前缀,因为它不再是 .htaccess 了。 Soo 尝试:

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

删除 .htaccess 引用是个好主意。您应该将AllowOverride None 放在&lt;Directory /&gt; 指令上,以便从文件系统的根目录开始。如果您认为您也不需要+ExecCGI。如果你想在没有 .htaccess 的情况下更深入地了解 Drupal 的 apache 配置,还请检查 this detailled resource。

【讨论】:

感谢您的回答,很抱歉我无法回答。我尝试不使用“/”,但仍然遇到与以前相同的问题 =/ 我可以阅读第一个索引页面并移至联系表单等等,但是当我尝试访问博客实体时,我被重定向回索引页。我还在日志文件中收到文件未找到错误消息。 好的,不要将我的答案标记为已接受,这会使您的情况适用于所有用户。改为支持它。然后更新您的问题,添加有关 url 工作和不工作的详细信息。

以上是关于Drupal 7 重写不使用 .htaccess的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 从 mysql 数据库恢复不起作用

重写Drupal的文件系统路径以删除冗余站点/example.com网站

在 Drupal 7 中使用表单

Drupal 7 视图暴露的过滤器不起作用

Drupal 7 - 不区分大小写的 LIKE 与 db_select

drupal 7 中可搜索的 civiEvents