.htaccess 重写条件HTTP:接受所有子文件夹的语言

.htaccess 重写条件HTTP:接受所有子文件夹的语言,.htaccess,redirect,.htaccess,Redirect,目前,我已将以下代码添加到.htaccess。此代码检测浏览器语言并将西班牙语访问者转发到/es/ 当使用西班牙语的用户访问mysite.com时,他们会自动发送到mysite.com/es/ RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^(es.*) [NC] RewriteCond %{REQUEST_URI} !(^/images/.*) RewriteCond %{REQUEST_URI} !(^/es/.*) [NC]

目前,我已将以下代码添加到.htaccess。此代码检测浏览器语言并将西班牙语访问者转发到/es/

当使用西班牙语的用户访问mysite.com时,他们会自动发送到mysite.com/es/

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^(es.*) [NC]
RewriteCond %{REQUEST_URI} !(^/images/.*)  
RewriteCond %{REQUEST_URI} !(^/es/.*) [NC]
RewriteRule ^(.*)$ /es/$1 [L,R=301]
这很好,但不适用于子文件夹。例如,如果同一用户访问mysite.com/page/他们不会被发送到mysite.com/es/page/

如何更改代码以使其适用于所有子文件夹

就像www重定向一样

rewriteCond %{HTTP_HOST} !site.com
rewriteRule ^(.*)$ site.com/$1 [R=301,L]

如果您访问site.com/page/test/您将自动重定向到www.site.com/page/test/但类似的内容似乎不适用于从www.site.com/page/test/到www.site.com/es/page/test/

的语言,如果您的布局是这样的,即存在包含内容的子文件夹,而不是web应用程序,然后在每个子文件夹中都需要这样一个.htaccess文件。放在es目录中的同一个文件应该可以做到这一点


至于西班牙西班牙语和秘鲁西班牙语的区别,你可以试试es和es PE。

谢谢。如果一个博客的每个页面/帖子都有1000多个子文件夹,这将是一项不可能完成的任务。在这种情况下,请尝试将这些规则放在主Apache配置文件中,如httpd.conf或/etc/apache2/sites available/default。有没有一种方法可以在没有根访问权限的情况下实现这一点?我希望可以在.htaccess中将root和所有子文件夹的cond%{HTTP:Accept Language}重写为root和所有子文件夹。就像www重定向重写cond%{HTTP_HOST}一样!site.com rewriteRule^.*$[R=301,L]如果您访问site.com/page/test/您将自动重定向到www.site.com/page/test/但类似的内容似乎不适用于从www.site.com/page/test/到www.site.com/es/page/test/的语言域和文件夹的处理方式不同,因此,虽然类似的方法可能适用于重写子/域,但不适用于文件夹或子目录。htaccess是一个本地覆盖-它仅对它所在的目录有效。当有人访问该目录时,不会处理文档根目录中的.htaccess。因此,您可以选择将这个.htaccess文件放在您希望重写的每个子目录中,或者在conf文件的VirtualHost部分中有一个全局规则。