htaccess 条件重写规则与 mod_GeoIP

Posted

技术标签:

【中文标题】htaccess 条件重写规则与 mod_GeoIP【英文标题】:htaccess conditional rewrite rule with mod_GeoIP 【发布时间】:2012-01-26 23:40:17 【问题描述】:

我正在为我的电子商务网站使用 mod_geoip,以将来自澳大利亚的客户重定向到同一服务器上的不同店面。商店位于 root/store/,我希望将它们重定向到 root/austore/

我知道了,所以基本的重写工作完美无缺,但我希望 url 结构是相同的。例如,如果有人单击 root/store/category/product/ 链接并且他们住在海外,我希望他们被重定向到 root/austore/category/product/,因为两个商店的文件结构相同。就像现在一样,如果他们点击该链接,它会将他们重定向到基本的 root/austore/。

这是现在的重写规则。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %ENV:GEOIP_COUNTRY_CODE ^AU$
RewriteRule ^([^/]+)$ /austore/ [L]

我正在编辑的 .htaccess 文件位于 store/ 目录中。

任何帮助将不胜感激。谢谢!

艾伦

【问题讨论】:

【参考方案1】:

试试

#skip processing /store/skin/ directory
RewriteRule ^store/skin/  - [L,NC] 

#if they live overseas i.e not Australia
RewriteCond %ENV:GEOIP_COUNTRY_CODE !^AU$
#if someone clicks on a link that is root/store/category/product/ 
RewriteCond %REQUEST_URI ^/store(/.*)$ [NC] 
#I want them to be redirected to root/austore/category/product/ 
RewriteRule ^ /austore%1 [L,R]

【讨论】:

跟进我最初的问题。我有引用原始根/存储/皮肤目录的 css、图像和 javascript 路径。随着 htaccess 重写到位,它正在重写那些不存在的路径到 root/ukstore/skin 并且破坏了所有这些链接。有没有办法让 url 重写到位,但保持皮肤目录的路径不变? @coloradohiker 请参阅上面的编辑以跳过/store/skin/directory 还有一个问题。我们的结帐页面是 https 并且在其中,它仍在重写皮肤和 js 页面的安全 url。有没有办法在https中也忽略它?再次感谢您的帮助。 关于上述规则的有趣问题出现了。我正在使用 GeoIP 来检测多个国家/地区,然后将它们发送到 austore。如果有人从新西兰访问,他们会被重定向到 austore,没有问题,图片、js、css 都在那里。这些文件的链接被忽略,所以它仍然读取 store/skin 如果有人从澳大利亚访问,那么所有这些链接都会被破坏并重写到 austore/skin/。对这个问题有什么想法吗?此外,所有 https 重写到 austore/skin 仍然存在问题。谢谢! @coloradohiker 我需要有关这两个问题的更多详细信息,例如在 HTTPS 下重写的 URL 示例以及您希望它的行为方式。与austore /皮肤问题相同。它们都可能很容易解决。还建议您创建一个新的帖子,其中包含详细信息,因为它比通过 cmets 更容易,并且会引起 SO 上每个人的关注。

以上是关于htaccess 条件重写规则与 mod_GeoIP的主要内容,如果未能解决你的问题,请参考以下文章

从 HTACCESS 文件中的所有 ISAPI 重写 3 规则中排除目录

子域“m”。与 WordPress 和。 htaccess(在 htaccess 中的重写规则冲突。)

在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败

如何配置thinkphp的伪静态重写

.htaccess 重写规则破坏 css

htaccess 重写规则 404 错误