我对网络开发很陌生,对后端开发人员一无所知。我有一个由Linux服务器上的第三方托管的网站,使用cPanel。
我有一个index.html
页面,当您访问网站www.domain.com
时会加载该页面,我有第二个文件page2.html
,当我转到www.domain.com/page2.html
我希望能够转到www.domain.com/page2
并加载page2.html。
当我转到www.domain.com/page3.html
(不存在)或www.domain.com/page3
或任何其他不存在的网址index.html
时,而不是给我404错误。我创建了一个自定义404页面(404.shtml
),该页面与index.html
和page2.html
(/public_html/
)位于同一目录中。
当我访问不存在的网址时,如何显示此404页面?我检查了cPanel上的错误日志,它显示了一个文件不存在错误。
[2014年8月29日星期五20:16:48] [错误] [客户。。。* ]文件不存在:/ home / adminName / public_html / page3,referer:http://domain.com/page3/
任何正确方向的指针都会非常有用。
答案 0 :(得分:1)
要从网址中删除后缀(.html),您需要使用.htaccess
。
以下将首先检查请求是文件(images / css等)还是目录,然后提供没有后缀的文件。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
以下内容将提供自定义404错误文档
ErrorDocument 404 /404.shtml
答案 1 :(得分:0)
我刚刚在问题1中找到了类似的StackOverflow Question,而Łukasz Habrzyk的第二个答案对我有效。
#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]