如何从静态页面的URL中删除.html
?
此外,我需要将任何带有.html
的URL重定向到没有.html
的URL(例如,将www.example.com/page.html
重定向到www.example.com/page
)。
如何从静态页面的URL中删除.html
?
此外,我需要将任何带有.html
的URL重定向到没有.html
的URL(例如,将www.example.com/page.html
重定向到www.example.com/page
)。
通过改进@amit-verma(https://dev59.com/aW025IYBdhLWcg3w6KSO#34726322)的答案,我希望为这个问题做出自己的贡献:
在我的情况下,我遇到了一个问题,即RewriteCond %{REQUEST_FILENAME}.html -f
即使我不希望它触发(认为文件存在),它仍然会触发:
%{REQUEST_FILENAME}.html
对于所有这些情况都给我/var/www/example.com/page.html
:
www.example.com/page
(预期的)www.example.com/page/
(也很预期)www.example.com/page/subpage
(不是预期的)所以它试图加载的文件(认为它是/var/www/example.com/page.html
)是:
www.example.com/page
=> /var/www/example/page.html
(正确)www.example.com/page/
=> /var/www/example/page/.html
(不正确)www.example.com/page/subpage
=> /var/www/example/page/subpage.html
(不正确)只有第一个指向一个现有文件,其他请求会给我返回500错误,因为它一直认为文件存在并重复添加.html
。
对于我来说,解决方案是将RewriteCond %{REQUEST_FILENAME}.html -f
替换为RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
这是我的整个.htaccess
(我还添加了一个规则将用户从/index
重定向到/
):
# Redirect "/page.html" to "/page" (only if "/pages.html" exists)
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} /(.+)\.html [NC]
RewriteRule ^(.+)\.html$ /$1 [NC,R=301,L]
# redirect "/index" to "/"
RewriteRule ^index$ / [NC,R=301,L]
# Load "/page.html" when requesting "/page" (only if "/pages.html" exists)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
RewriteRule ^ /%{REQUEST_URI}.html [QSA,L]
首先创建一个 .htaccess 文件,并将其内容设置为 -
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
接下来,您需要从所有文件中删除“.html”后缀,例如test.html变成了test。如果您想从另一个文件打开文件,则还需要从文件名中删除“.html”后缀。
使用哈希标签。
可能不完全符合您的要求,但它解决了删除扩展名的问题。
假设您有一个保存为about.html
的HTML页面,而您不想要这个烦人的扩展名,您可以使用哈希标签并重定向到正确的页面。
switch(window.location.hash.substring(1)){
case 'about':
window.location = 'about.html';
break;
}
将路由到yoursite.com#about
会带您到yoursite.com/about.html
。 我使用这个方法使我的链接更加简洁。
为此,您需要将URL从/page.html重写为/page。 您可以在任何扩展名如.html .php等上轻松实现此功能
RewriteRule ^(.*).html$ $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
example.com/page.html 和 example.com/page
RewriteRule ^(.*).html$ $1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
更多信息在这里
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* https://example.com/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
它可能有效,因为在我的情况下它有效。
为了从您的URL中删除.html扩展名,您可以在root/htaccess中使用以下代码:
#mode_rerwrite start here
RewriteEngine On
# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.
RewriteCond %{REQUEST_FILENAME} !-d
#Check for file in directory with .html extension
RewriteCond %{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extension
RewriteRule ^(.*)$ $1.html [NC,L]
谢谢
!
。 - MrWhiteRewriteRule /(.+)(\.html)$ /$1 [R=301,L]
试试这个 :)不知道是否有效。