reactjs NextJS htaccess设置在URL上没有尾随斜杠

r8uurelv  于 2023-02-22  发布在  React
关注(0)|答案(1)|浏览(176)

发现我在NextJS上的站点有问题,在开发过程中,我使用按钮导航站点,并手动更改浏览器地址栏,碰巧我不小心在末尾添加了一个斜杠,但我的localhost服务器将其删除,一切正常。
但是当我把我的静态应用程序上传到主机上时,一切都改变了。它在重新加载页面时自动开始添加这些斜线。正因为如此,我在网站上的图片断裂了。
据我所知,您需要正确配置.htaccess文件。
下面是它现在的样子:

RewriteEngine On
RewriteRule ^([^/]+)/$ $1.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
w8f9ii69

w8f9ii691#

RewriteRule ^([^/]+)/$ $1.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

您现有的规则都希望(或强制)在所有URL上添加一个尾随斜杠。因此,如果规范URL(和你链接到的网址)不包括一个尾随斜线,那么所有这些规则基本上需要颠倒过来。(例如,第一个规则是 * 无条件地 * 重写请求以附加.html扩展,这在下一个规则中以 * 条件 * 重复)。
请尝试以下操作:

RewriteEngine On

# (OPTIONAL) Remove trailing slash if it happens to be on the request
# Exclude physical directories (which must end in a slash)
RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule (.+)/$ /$1 [R=301,L]

# Rewrite request to corresponding ".html" file if it exists
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.]+)$ $1.html [L]

你原来的指令只处理一个或两个路径深度的URL(例如/foo//foo/bar/)。上面的第二条规则处理任何路径深度(如果需要的话)。例如/foo/foo/bar/foo/bar/baz等(没有拖尾斜杠)。
作为一种优化,我 * 假设 * 您的URL需要重写不包含点(否则用于分隔文件扩展名)。
注意,RewriteRule * pattern *(第一个参数)只匹配URL路径(而不是查询字符串)。如果初始请求中有任何查询字符串,则默认情况下只传递该查询字符串。(对于重写和客户端JS,查询字符串在初始请求中可用,并且应该像以前一样进行解析。)
正因为如此,我的照片在网站上打破。
如果您使用的是相对URL,则会发生这种情况。您应该使用根相对(以斜杠开头)或绝对URL来解决此问题。

相关问题