将 index.html 设为默认值,但如果输入则允许访问 index.php

Posted

技术标签:

【中文标题】将 index.html 设为默认值,但如果输入则允许访问 index.php【英文标题】:Make index.html default, but allow index.php to be visited if typed in 【发布时间】:2012-04-17 15:34:07 【问题描述】:

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

DirectoryIndex index.html index.php

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

【问题讨论】:

index.htmlindex.php 是否都存在,还是只有一个? 它们都存在。你是说我的 .htaccess 文件应该允许我访问这两个文件吗? 你不应该在DirectoryIndex 中只有index.html 吗?那么它将是example.com 的默认值。另一个文件应该在example.com/index.php 可用。 即使 index.php 存在,它实际上会将您重定向到 index.html?然后有一些其他配置干扰。也许重写规则出错了? 我建议您查看您的 index.php 并确保它没有使用某些 header 函数将您重定向到 / 【参考方案1】:

默认情况下,DirectoryIndex 设置为:

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

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

顺序应该是DirectoryIndex index.html index.php // 默认是index.html

参考:Here。

【讨论】:

谢谢伙计,今晚我将删除 .htaccess 文件,看看这是否能解决我的问题。我觉得这似乎有点奇怪,因为在此之前我的任何网站都没有发生过这种情况。【参考方案2】:

如果您使用的是 WordPress,现在有一个过滤器挂钩可以解决此问题:

remove_filter('template_redirect', 'redirect_canonical'); 

(把这个放在你主题的functions.php

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

【讨论】:

那是救命稻草!!【参考方案3】:

我同意@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/ 将向您显示 index.html 的内容。

【讨论】:

【参考方案4】:

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>

【讨论】:

【参考方案5】:

嗨,

嗯,上面提到的方法我都试过了!它工作是的,但不完全是我想要的方式。我想通过我们的进一步操作将默认页面扩展名重定向到主域。

我该怎么做...

# 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>

上面的代码只是简单地捕获任何索引。*并将其重定向到主域。

谢谢

【讨论】:

【参考方案6】:
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。

【讨论】:

这看起来很漂亮,但不是我害怕之后的样子。

以上是关于将 index.html 设为默认值,但如果输入则允许访问 index.php的主要内容,如果未能解决你的问题,请参考以下文章

如果对象存在于全局中,则R从函数中从全局环境中获取对象,但如果不存在则使用不同的默认值

有没有办法将 c++ 编译器标志设为默认值

如果输入文本被删除,则插入默认值

如果没有给出输入,则使用默认值继续执行程序

jQuery:输入文本默认值,单击清除值,如果键入的值被删除,则获取默认值bac

如何将 np.select() 的默认选择设为数组、系列或数据帧的先前值