输入以下代码后,我的主页会出现403错误。该网站的其余部分完美运作。所有.html实例都被删除了。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
有什么建议吗? 谢谢!
答案 0 :(得分:0)
example.com导致403错误。如果我写example.com/index它可以正常工作。
其他必须更改的内容才会导致403错误。当您请求example.com/
时,您发布的代码实际上无法执行任何操作 - 就像该代码根本不存在一样。 (更新:但是,这假设您的.htaccess
文件位于文档中 - 看起来情况并非如此 - 请参阅下文。)
但是,在这种情况下会触发403的是格式化目录列表"被禁用,目录索引文档无法找到(或已被禁用)。
因此,请尝试在.htaccess
文件的顶部设置相应的目录索引:
DirectoryIndex index.html
DirectoryIndex
在请求您的"主页"时提供相应的文件,而不是.htaccess
中的指令。
<强>更新强>
[.htaccess]位于我的根目录中。将它放在public_html文件夹中会更好吗?
是的,您发布的代码应该放在/public_html
目录中(即您的文档根目录)。如果这些指令位于文档根目录的.htaccess
文件上方,那么RewriteRule
模式将匹配URL路径public_html/
和将URL重写为public_html/.html
,这可能是403错误的来源(&#34; dot&#34;文件通常是隐藏/受保护的OS文件,您可能在服务器配置阻止访问时也有一个指令。但是,此行为也可能取决于服务器配置/ OS中的其他因素。但是,使用文档根目录中的代码,然后example.com/
(您的主页)的请求不会被这些指令处理(这很好) - mod_dir应该提供index.html
文件在这种情况下。
但是,您不想处理&#34;目录&#34;无论如何(public_html
显然是&#34;目录&#34;而不是文件)。这就是上面发生的事情。例如。不应将.html
附加到public_html/
以开始(或example.com/path/to/directory/
或任何其他目录)。这可以通过向规则块添加附加条件来避免目录(以及文件)。例如:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.html [L]
只需添加额外的RewriteCond
指令就足够了,仍然允许您将.htaccess
文件保留在文档根目录之上。 (但是,您可能仍需要移动.htaccess
文件,如上所述。)
此外,此处不需要NC
标记,并且在字符类中使用时,不需要转义字符点。
您还可以扩展此代码,以便在重写之前首先检查文件是否存在(带有.html
扩展名),尽管在您的情况下这可能是不必要的。例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$ $1.html [L]
这需要额外的&#34;文件检查&#34;这可能是不必要的开销。