使index.html成为默认值,但如果键入,则允许访问index.php

时间:2012-04-03 22:35:14

标签: html .htaccess

我的.htaccess文件中有以下行:

DirectoryIndex index.html index.php

每次我去index.php它都会把我带到index.html。是否可以同时允许两者,但将index.html作为访问www.domain.com的用户的默认值?

6 个答案:

答案 0 :(得分:88)

默认情况下,DirectoryIndex设置为:

DirectoryIndex index.html index.htm default.htm index.php index.php3 index.phtml index.php5 index.shtml mwindex.phtml

Apache将按顺序查找上述每个文件,并在访问者仅请求目录时找到它找到的第一个文件。如果Web服务器在当前目录中找不到与DirectoryIndex指令中的名称匹配的文件,则会向浏览器显示目录列表,显示当前目录中的所有文件。

订单应为DirectoryIndex index.html index.php //默认为index.html

参考: Here

答案 1 :(得分:16)

如果你正在使用WordPress,现在有一个过滤器钩子来解决这个问题:

remove_filter('template_redirect', 'redirect_canonical'); 

(把它放在你的主题functions.php

这告诉WordPress不要将index.php重定向回根页面,而是将其置于原位。这样,index.html可以被指定为.htaccess中的默认页面,并且可以与index.php一起使用。

答案 2 :(得分:5)

我同意@ TheAlpha的接受答案,Apache从左到右读取DirectoryIndex目标文件,如果第一个文件存在,apche服务它,如果没有,那么下一个文件将作为索引用于目录。因此,如果您有以下指令:

DirectoryIndex file1.html file2.html

Apache将/file.html作为索引提供,如果要将/file2.html设置为索引,则需要更改文件的顺序

DirectoryIndex file2.html file1.html

您还可以使用RewriteRule

设置索引文件
RewriteEngine on

RewriteRule ^$ /index.html [L]

上面的RewriteRule会将您的主页重写为/index.html,内部重写会发生,因此http://example.com/会显示inindex.html的内容。

答案 3 :(得分:2)

  

DirectoryIndex index.html index.htm default.htm index.php index.php3   index.phtml index.php5 index.shtml mwindex.phtml

它有什么办法吗? 你可能只需要这样添加!

<IfModule dir_module>
    DirectoryIndex index.php index.html index.htm
</IfModule>

https://github.com/CyberNinjas/aad-login

答案 4 :(得分:1)

RewriteEngine on
RewriteRule ^(.*)\.html$ $1.php%{QUERY_STRING} [L]

将这两行放在.htaccess文件的顶部。它将在.php页面的URL中显示.html。

RewriteEngine on
RewriteRule ^(.*)\.php$ $1.html%{QUERY_STRING} [L]

使用它来显示.html页面的URL中的.php。

答案 5 :(得分:1)

嗨,

好吧,我已经尝试了上述方法!是的,但不是我想要的方式。我想通过我们的进一步操作将默认页面扩展名重定向到主域。

这是我的方法...

# Accesible Index Page
<IfModule dir_module>
 DirectoryIndex index.php index.html
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html|htm|php|php3|php5|shtml|phtml) [NC]
 RewriteRule ^index\.html|htm|php|php3|php5|shtml|phtml$ / [R=301,L]
</IfModule>

上面的代码仅捕获任何索引。*并将其重定向到主域。

谢谢