没有协议时,URL重定向到index.php

时间:2013-10-17 16:29:05

标签: apache .htaccess mod-rewrite drupal

希望有更多htaccess经验的人可以帮助我们。我们有Drupal 7网站,我们刚从开发者转移到现场主机(不同的托管公司)。但是,现在当有人将没有协议的URL直接放入地址栏时(例如:examplesite.com/members),页面会重定向到examplesite.com/index.php。我一直在试图在htaccess文件中解决这个问题,但是还没有找到允许没有协议的URL的正确语法,同时也强制使用https://。

我们的代码:

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d 
   RewriteCond %{REQUEST_URI} !=/favicon.ico
   RewriteRule ^ index.php [L]


  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

我们已经尝试将RewriteRule ^ index.php [L]行移动到所有规则下面,或者将其注释掉。这解决了最初的问题,但打破了后端的drupal管理功能(无法看到管理菜单,无法保存任何内容等)

任何见解都会有所帮助,请告诉我是否需要更多信息。先感谢您。

1 个答案:

答案 0 :(得分:0)

您需要将整个块,条件+规则移动到底部。 Drupal通过index.php脚本路由所有内容,它需要前面的3个条件才能正确执行。如果您只是移动RewriteRule行,则条件全部消失。

RewriteEngine On

# this needs to come first
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# then drupal stuff comes LAST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]