我的.htaccess文件中有以下行:
DirectoryIndex index.html index.php
每次我去index.php它都会把我带到index.html。是否可以同时允许两者,但将index.html作为访问www.domain.com的用户的默认值?
答案 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>
答案 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>
上面的代码仅捕获任何索引。*并将其重定向到主域。
谢谢