我有一个静态网站 - 一堆静态HTML页面。我想从我的网页的URL中删除.html部分。我使用了带有以下代码的.htaccess文件来执行此操作:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
但是,我收到404错误。例如:
在此服务器上找不到请求的网址/home/username/public_html/contact.html。
理想情况下,它应该重定向到/@username/contact.html。
添加信息 当我使用"选项-MultiViews"它在代码上方产生以下错误:
500内部服务器错误:服务器遇到内部错误或配置错误,无法完成您的请求。
此处使用Apache / 2.2.15(Red Hat)服务器。
为什么我要面对这个问题? root是否会自动从public_html/
文件夹更改?
编辑:
目录结构:
用户名文件夹位于universitynameuniverse文件夹下(我看不到其他文件夹)。
答案 0 :(得分:0)
在.htaccess中尝试此代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
就是这样!您现在可以链接HTML文档中的页面,而无需添加页面的扩展名。
答案 1 :(得分:0)
试试这个:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [QSA,L]
</IfModule>
## Results
# ~user/contact => ~user/contact.html (only if file exists)
仅当~user/
目录实际存在于文件系统上时才有效。
如果您需要外部重定向,请在RewriteRule指令中添加R
标志。
您的重写规则存在的问题是,它会在整个.html
变量后附加%{REQUEST_URI}
后缀,这可能会导致404。
重新阅读您的问题我注意到您要将~user
部分映射到apache webroot之外的某个位置。在这种情况下,试试这个:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/~(.+)/(.+)$
RewriteCond /home/%1/public_html/%2.html -f
RewriteRule . /home/%1/public_html/%2.html [QSA,L]
</IfModule>
## Results
# ~user/contact => /home/user/public_html/contact.html (only if file exists)