我在一个多语言网站上工作,我需要为每种语言设置自定义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的功能已经存在。
感谢您的输入,
詹姆士
我认为我遇到的问题是RewriteCond不正确。但是我发现了一种解决方法,因为PHP将语言存储在会话变量中。
ErrorDocument 404 http://www.domain.com/404/
RewriteRule ^404(/)?$ index.php?controller=utils&method=view404 [L]
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]
我的解决方法只是使用domain.com/404作为默认值,然后在可能的情况下通过会话设置语言,或者在没有时加载UK 404页面。
如果在查询字符串中设置了语言变量,则使用第二和第三重写规则来传递它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句