我在ubuntu服务器上使用php / nginx / mysql运行一个joomla 2.5站点(相当新的nginx)
我的问题是,当用户点击网址时,我需要它来忽略.html文件扩展名。
例如,如果您点击mysite.com/page,则会将页面呈现为正常。
如果你点击mysite.com/page.html那么它会抛出404错误。这是因为我的网站上实际上没有“page.html”页面。它是K2的别名。是的,我不能放入.html,但它不是我向网站添加内容,而是客户端。我最近移动了服务器,在它工作正常之前,现在它没有这样我知道我在配置中遗漏了一些东西。
我知道我可以通过try files
让nginx与我想要的相反。不知道如何让它反过来。
这是我的nginx配置:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.php;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
现在我知道我是否有一个page.html页面,我想隐藏.html我可以添加$uri.html
我想知道的是如何让nginx试用page.html
如果它找不到page
答案 0 :(得分:1)
原来是Joomla Config变量。在全局配置中的SEO设置下设置'apply suffix'为yes。我觉得很蠢。感谢所有那些试图提供帮助的人,一如既往地非常感谢。
答案 1 :(得分:0)
这是我设法遇到的潜在解决方案:
location / {
# If /{foo} is not an existing file or directory, rewrite to /{foo}.html
if (!-e $request_filename) {
rewrite ^(.+)$ /$1.html break;
}
# Redirect all {foo}.html URLS to /{foo}
rewrite ^/(.*)\.html$ /$1 redirect;
}
如果您能正确撰写.htaccess
重写行,请尝试使用htaccess-to-nginx converter
如评论所述,这将使用当前URL检查目录,文件等的存在。如果不存在,它将尝试请求附加.html
的网址。
此外,如果网址中已存在.html
,则会将其重定向到不包含.html
的网址
答案 2 :(得分:0)
快速解决方法:
rewrite ^(. *)\.html$ $1 break;
应该是堆栈中的第一次重写,甚至在try_files之前。