棘手的.htaccess和Drupal问题

时间:2010-09-23 11:39:29

标签: php drupal .htaccess

1) 我有一个位于http://example.com的Drupal网站,我的目录位于http://example.com/foo,但我还有一个带别名的Drupal页面http://example.com/foo。如何让Drupal页面服务?目前,由于Drupal的.htaccess文件中的Options -Indexes声明,我获得了403禁止页面,但我不想删除它,因为我不希望目录可浏览。

编辑:我已使用以下规则解决了这个问题:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ http://localhost/s2k/index.php?q=$1 [L,QSA]

2)为了使问题更加困难,给定相同的方案,如果我在目录index.html中有http://example.com/foo/index.html文件,我总是希望这个优先级在Drupal的别名页面上(目前它正在执行 - 目前我修改了.htaccess文件,以便任何带有index.html文件的目录显示它 - DirectoryIndex index.php index.html)。

修改

现在,我怎么写一个RewriteCond来查看目录中是否有index.html文件?

3 个答案:

答案 0 :(得分:3)

我不是RewriteRule Guru并且非常确定有更好的方法来实现这一点,例如有条件的RewriteCond。

但只需添加

RewriteCond %{REQUEST_URI} =/foo/
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

在默认重写之上Conds和规则使这个规则启动/ foo /而不是Drupal默认值。如果某些东西不是dir,RewriteCond %{REQUEST_FILENAME} !-d只会应用RewriteRule。

答案 1 :(得分:2)

RewriteCond %{REQUEST_FILENAME} -d  
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteRule ^(.*)$ http://localhost/s2k/index.php?q=$1 [L,QSA]

答案 2 :(得分:0)

RewriteCond %{REQUEST_FILENAME}index.html -f
RewriteRule ^(.*)$ $1index.html [L]

RewriteCond %{REQUEST_FILENAME}/index.html -f
RewriteRule ^(.*)$ $1/index.html [L]

[normal Drupal rewrite rules]