我更换了网站托管服务提供商,现在遇到了配置问题:在我的网站根目录中,有一个名为 的文件beta.html
。即使以http://example.com/beta
或访问,以前的网站托管商上的 Apache 配置也会提供其内容http://example.com/beta/
。新网站托管商上的 Apache 将这两种情况视为 404 错误。请注意,不beta
该站点上命名的目录。
我可以做些什么.htaccess
让它在没有客户端重定向的情况下提供 beta.html 的内容?
答案1
MultiViews
针对相关内容启用Directory
。
<Directory /my/web/site>
Options MultiViews # and your other options
</Directory>
答案2
我的第一个猜测是,你的旧托管服务提供商有 Aapche 的mod_speling启用,这允许 Apache 在显示 404 错误之前纠正轻微的大小写不匹配和/或拼写错误。
最佳做法是将其关闭,因为它可能会造成相当大的开销并且不会阻止糟糕的网页设计。
答案3
您可以使用 mod_rewrite 来执行此操作。网上有很多教程。
然而我要提醒的是,由于冲突、复杂性和 SEO 的原因,这不是推荐的做法。
例如参见:使用 htaccess 重写 .html 文件扩展名 我没有测试过这个但是看到有人使用这个和类似的方法。
请注意,这将影响您的整个网站。如果您只想处理一个 URL,请添加,RewriteCond
以便过滤仅适用于该 URI。
# This tag ensures the rewrite module is loaded
<IfModule mod_rewrite.c>
# enable the rewrite engine
RewriteEngine On
# Set your root directory
RewriteBase /
# remove the .html extension
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
RewriteRule (.*)\.html$ $1 [R=301]
# remove index and reference the directory
RewriteRule (.*)/index$ $1/ [R=301]
# remove trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
# forward request to html file, **but don't redirect (bot friendly)**
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.html [L]
</IfModule>