.htaccess DirectoryIndex无效

时间:2013-11-10 04:57:14

标签: apache .htaccess mod-rewrite

我有一个在Linux / UNIX上运行的网站,但我不知道.htaccess文件及其中使用的语法有什么不妥。

如果您转到http://pr.bananapages.net,系统将不会产生任何结果。 但是如果你添加文件名,就会出现。例如:http://pr.bananapages.net/index.html

注意:该URL指向共享访问托管服务器上的子文件夹,但它并不重要,因为当您键入www.bananapages.net/pr/hamshack时,(这就是快捷方式的DNS地址)指向),它仍然不会生成index.html文件而不实际指定它。

我已经尝试了关于DirectoryIndex的所有内容,但是如果不使用文件名我就无法工作......(index.html)

这是我当前的.htccess文件。

Options -MultiViews

DirectoryIndex system.php index.php

<IfModule mod_rewrite.c>
DirectoryIndex system.php index.php index.html

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)\.(.*)$
RewriteRule ^(.+[^/])$ http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Google sitemap controller
RewriteRule ^sitemap.xml$ tmp/sitemap.xml [L]
RewriteRule ^tmp/sitemap.xml$ tmp/sitemap.xml [L]
RewriteRule ^index.html$ index.html [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)(\.xml|\.php([0-9]*)|\.tpl|\.phtml|\.ini|\.inc|/)$ system.php?_p=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ system.php?_p=$1 [QSA,L]

</IfModule>

# compresses text, html, javascript, css and xml
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
</IfModule>

注意:如果我重命名.htaccess文件,它将无需指定文件名(index.html)即可。我相当确定这个.htaccess文件中有一些内容阻止了它以所需的方式工作。

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

在你所有的

  

RewriteCond%{REQUEST_FILENAME}!-f

将它加倍,因为只有当lt既不是目录也不是文件时,要重写:

修改

(在Debian / Apache2中测试)。

Options -MultiViews

DirectoryIndex system.php index.php index.html

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)\.(.*)$
RewriteRule ^(.+[^/])$ http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]

# Google sitemap controller
RewriteRule ^sitemap.xml$ tmp/sitemap.xml [L]
#RewriteRule ^tmp/sitemap.xml$ tmp/sitemap.xml [L]
#RewriteRule ^index.html$ index.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)(\.xml|\.php([0-9]*)|\.tpl|\.phtml|\.ini|\.inc|/)$ system.php?_p=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ system.php?_p=$1 [QSA,L]

看看它是否更好?请注意一些注释的无限循环重写。

答案 1 :(得分:0)

我的vps上有类似的情况

我希望我的默认主页是login.php,所以如果有人去哪里http:// [ip] / [folder] /它只会加载我在.htaccess中设置的login.php文件[文件夹]

所以我在.htaccess中设置了'DirectoryIndex login.php'但是

它不会起作用而我会在访问http:// [ip] / [folder] /时获得403,因为我没有任何index.html或index.php

所以...

我决定检查apache配置文件httpd.conf并在DirectoryIndex下我把'login.php'作为已经存在的列表的一部分然后重新启动httpd服务和

它对我有用!

答案 2 :(得分:-1)

这是答案......

# Rules for subfolders
# for pr.bananapages.net
RewriteRule ^pr/(.*)$ pr/$1 [L]
# for jm.bananapages.net    
      RewriteRule ^jm/(.*)$ jm/$1 [L]
# and so on....
      RewriteRule ^dr/(.*)$ dr/$1 [L]
RewriteRule ^usvi/(.*)$ usvi/$1 [L]
RewriteRule ^bvi/(.*)$ bvi/$1 [L]
RewriteRule ^kitts/(.*)$ kitts/$1 [L]
RewriteRule ^ar/(.*)$ ar/$1 [L]
RewriteRule ^tt/(.*)$ tt/$1 [L]

我不知道为什么会起作用,但似乎确实有效...... 戴尔