我的 .htaccess 文件中有以下行:
DirectoryIndex index.html index.php
每次我去 index.php 时,它都会带我去 index.html。是否可以同时允许两者,但将 index.html 保留为访问 www.domain.com 的用户的默认值?
默认情况下,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
参考: 这里。
如果您使用的是 WordPress,现在有一个过滤器挂钩可以解决此问题:
remove_filter('template_redirect', 'redirect_canonical');
(把这个放在你的主题中functions.php
)
这告诉WordPress不要重定向index.php
回根页面,而是坐在它所在的位置。这样,index.html
可以指定为默认页面,.htaccess
并且可以与index.php
.
我同意@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 的内容。
你好,
嗯,上面提到的方法我都试过了!它的工作是肯定的,但不完全是我想要的方式。我想通过我们的进一步操作将默认页面扩展重定向到主域。
这是我如何做到的......
# 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>
上面的代码简单地捕获任何 index.* 并将其重定向到主域。
谢谢
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。