-1

最近我的托管服务提供商一直在将他们的 apache 系统更新到 2.4.4。在这样做时,它导致我的表达式引擎站点中断,因为我现在需要强制查询字符串以使站点运行。

据我了解,您只需将 .htaccess 规则中的一行更新为 ...

RewriteRule ^(.*)$ /index.php?/$1 [L]

不幸的是,解决这个问题并不像这样简单。

我的网站使用自定义表达式引擎插件来检测他们使用 IP to Nation 模块在世界的哪个区域。基本上发生的情况是,如果您来自美国,您会看到包含美国内容的网站,如果您来自其他任何地方,它会将“国际”附加到 URI 的第一部分,它将根据第一部分显示国际内容我们的 URI

例如

http://www.example.com/segment_1/segment_2/segment_2 = US SITE

http://www.example.com/international/segment_1/segment_2/segment_2 = INTERNATIONAL SITE 

当我尝试将该查询字符串添加到 index.php 的 rewriteRule 时,它​​会破坏国际站点,我不知道为什么。

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteRule /international/(.*)$ /index.php/$1 [L]

添加“?” 修复RewriteRule ^(.*)$ /index.php?/$1 [L]美国网站但打破国际网站说它找不到国际页面。

添加“?” 修复RewriteRule /international/(.*)$ /index.php?/$1 [L]国际站点,但美国站点将无法工作,因为它需要查询字符串。

并且将它添加到它们两者都将不起作用。

我显然在 .htaccess 中遗漏了一些东西来克服这个问题,但我似乎无法生成正确的语法。

有任何想法吗?

4

1 回答 1

1

我将在这里进行疯狂的猜测,所以可能完全没用......

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteRule /international/(.*)$ /index.php/$1 [L]

问题看起来像您重写了在 index.php? 中添加的 URL,然后再次将其添加到国际 - 因此当您添加“?” 它对两者来说,它都会杀死重写。

所以第一次重写你需要排除国际,第二次确保它只影响国际。

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(international)
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_URI} (international)
RewriteRule /international/(.*)$ /index.php?/$1 [L]

您可能需要为第二部分重复 3 个初始条件。

更新

这使它最终工作(感谢您指出我正确的方向 - 卢克)

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(international)
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (international)
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteRule /international/(.*)$ /index.php?/$1 [L]
于 2013-05-03T12:08:25.607 回答