我正在开发一个多语言网站,需要为每种语言设置自定义 404 页面。我在 .htaccess 中有以下规则,但不太正常:
RewriteCond %{REQUEST_URI} !^/(ie)(/|$) [NC]
ErrorDocument 404 http://www.domain.com/ie/404/
RewriteCond %{REQUEST_URI} !^/(se)(/|$) [NC]
ErrorDocument 404 http://www.domain.com/se/404/
RewriteCond %{REQUEST_URI} !^/(nl)(/|$) [NC]
ErrorDocument 404 http://www.domain.com/nl/404/
#last rule becomes default
RewriteCond %{REQUEST_URI} !^/(en)(/|$) [NC]
ErrorDocument 404 http://www.domain.com/uk/404/
RewriteRule ^([a-z]{2})/404(/)?$ index.php?controller=utils&method=view404&lang=$1 [L]
RewriteRule ^([a-z]{2})/404.html$ index.php?controller=utils&method=view404&lang=$1 [L]
我认为问题可能出在!在 RewriteCond 中,但是删除它并没有帮助。如果我访问domain.com/4t3409t0(一个不存在的页面),它会匹配最后一个RewriteCond并重定向到domain.com/uk/404(实际上有效)。
但是,如果我尝试使用诸如domain.com/ie/wfnwio之类的URL,它会尝试重定向到domain.com/ie/404(应该如此),并且我会陷入重定向循环。
因此,看起来当满足最后一个 RewriteCond 时,重写有效,但对于其他任何重写,重写都会失败。
我只需要为每种语言设置ErrorDocument URL,将不存在的内容重定向到404的功能已经存在。
感谢您的任何意见,
James
我建议用这样的东西替换所有这些:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(ie|se|nl)/ $1/404 [R=404,L]
解释
- 这三个条件检查请求的文件或文件夹不存在
- 该规则检查请求的 url 是否以三个国家/地区之一开头,然后是
/
,将国家/地区代码捕获到组 1
- 它重定向到 Group1/404,例如
ie/404
带有 404 代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)