.htaccess nginx重写html文件并添加尾部斜杠

.htaccess nginx重写html文件并添加尾部斜杠,.htaccess,nginx,url-rewriting,.htaccess,Nginx,Url Rewriting,我读了十几个倒带问题。大多数问题都是针对.php的,但我有简单的.html文件,所以about=>about.html。但我无法让nginx做到这一点: 接受带或不带“/”的url 将domain.com/about和domain.com/about/重定向到domain.com/about.html 在URL中添加尾随斜杠,这样如果我写domain.com/about,就会写domain.com/about/ 我已尝试使用此代码 rewrite^/([a-zA-Z0-9]+)$/$1.ht

我读了十几个倒带问题。大多数问题都是针对.php的,但我有简单的.html文件,所以about=>about.html。但我无法让nginx做到这一点:

  • 接受带或不带“/”的url
  • 将domain.com/about和domain.com/about/重定向到domain.com/about.html
  • 在URL中添加尾随斜杠,这样如果我写domain.com/about,就会写domain.com/about/
我已尝试使用此代码
rewrite^/([a-zA-Z0-9]+)$/$1.html
但它给了我404错误,url以“/”结尾。我也试过这个
rewrite^([a-zA-Z0-9]+)/?$$1.html
出现相同错误

有人建议我应该使用try
try\u文件

我也尝试了这个方法,它给出了500个错误:

location / { 
rewrite ^(.*)$ /%1 redirect; 
rewrite ^/([^\.]+)$ /$1.html break; 
}
我试图将apache从suggestion转换为nginx(winginx.com),但没有成功

此代码不起作用。我正在尝试重定向并添加尾部斜杠:

if (!-e $request_filename){
rewrite ^/(.*)/$ /$1 redirect;
}
if (!-e $request_filename){
rewrite ^/(.*[^/])$ /$1/ redirect;
}

任何建议都会让我很高兴。

我想在这里试试看是合适的。例如:

location /about {
    try_files about.html;
}

我已经测试了此配置,它似乎符合您的要求(YMMV):

第一个位置尝试按原样提供资源文件所必需的文件。否则,它将遵从指定的位置

命名位置将永久重定向任何不以
/
结尾的URI。否则,将提供
.html
文件


有关详细信息,请参阅和。

最简单的解决方案是将
about.html
重命名为
about/index.html
,然后
nginx
的索引模块可以满足您的需要。这听起来有点过分了。不是单个html文件,而是为每个html文件创建一个文件夹,并将index.html文件中的内容放入该文件夹?!?将适用于about.html,但我有很多文件,about.html、contact.html、projects.html、gallery.html等。您可以为每个文件创建一个块或使用正则表达式,如:
location~ ^/(.*)/?${try_files$1.html;}
Hi,很抱歉,这不起作用。通过这个配置,我在index.html(root)上获得了一个404页面。当我点击例如“projects”时,它显示projects.html,URL为“”,但所有css和图像都被破坏。在项目页面上,我点击链接“about”(页面是about.html),我得到“->它应该是”并从那里转到“…”等。因此有一个内部循环。使用路径相关资源(css&js)将不适用于您的方案,因为浏览器假定尾部的
/
是一个子目录。到
about.html
的链接可能应该是
/about.html
,以避免出于同样的原因获得
/project/about.html
。我不了解内部循环-但这是一个很大的风险与这些类型的计划。我同意风险理查德!我重写了绝对路径,css和图像正在工作。也使链接绝对化。修复了错误的URL。感谢您的洞察力和理解我试图解决的问题!
root /path/to/root;

location / {
    try_files $uri @rewrite;
}
location @rewrite {
    rewrite ^(.*[^/])$ $1/ permanent;
    rewrite ^(.*)/$ $1.html break;
}