我试图通过评估客户HTTP Accept-Language头来生成纯粹基于Apache mod_rewrite规则的语言依赖404(也是其他错误)页面。 我已经设法显示正确的页面(英文默认)与这个规则:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{HTTP:Accept-Language} ^es [NC] RewriteRule (.+) /esp/error404.PHP [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule (.+) /eng/error404.PHP [L]
我的问题是,我想保持404错误,我明白redirect不允许这种types的标志。 我在任何情况下都不是100%确定是否真的值得search引擎优化明智,因为它可能最好没有404s,但我认为这将更符合逻辑和维护日志一致等,但我根本无法如何通过apache和HTTP实现:Accept-Language。
任何意见将主要赞赏。
Wampserver图标不会完全绿色,MysqL服务不启动?
将非www和非httpsredirect到https:// www
htaccess密码保护,但不在本地主机上
Restler API框架安装
Python 3.4导致Apache2服务器(Mac)上的UnicodeEncodeError,但在命令行中正常工作
安装SSH2 for PHP以在OSX 10.9.1上的Xampp Apache服务器上运行
.htaccess使用GET参数redirect
如何在一个Tomcat + Apache上部署多个Grails应用程序?
应该可以像这样定义一个ErrorDocument:
ErrorDocument 404 /parseme.PHP
然后做一个语言依赖重定向请求到/parseme.PHP像这样:
RewriteCond %{REQUEST_FILENAME} ^/parseme.PHP$ RewriteCond %{HTTP:Accept-Language} ^es [NC] RewriteRule (.+) /esp/error404.PHP [L] RewriteCond %{REQUEST_FILENAME} ^/parseme.PHP$ RewriteCond %{HTTP:Accept-Language} ^eng [NC] RewriteRule (.+) /eng/error404.PHP [L]
我从来没有尝试过,但这应该给你一个404头,错误页面也是正确的语言。
Pekka先前的回答完成了这项工作。 我在这里包括完整的代码供参考,因为它不适合评论。
我从来没有假设即使404文档指令可以重写。 只是为了澄清其他人…“parseme.PHP”文件甚至不需要存在,因为它应该重定向到通过重写。 不知道,但它似乎工作在我的情况下,只有当指令是在虚拟主机的根而不是顶级目录。 最终的代码为我工作如下:
ErrorDocument 404 /error_404.PHP RewriteEngine on # If spanish... use spanish error page RewriteCond %{REQUEST_FILENAME} ^/error_404.PHP$ RewriteCond %{HTTP:Accept-Language} ^es [NC] RewriteRule (.+) /esp/error404.PHP [L] # If prevIoUs did not match - any language (note [L] flag on prevIoUs rule) use english RewriteCond %{REQUEST_FILENAME} ^/error_404.PHP$ RewriteRule (.+) /eng/error404.PHP [L]
你不能像你那样解释Accept-Language头域 。 这不只是一个单一的值,而是一个加权值列表。
你应该更好地使用PHP进行语言协商,因为mod_rewrite太有限了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。