根据URL字符串参数,从不同的目录中为网站提供服务。

问题描述 投票:-1回答:1

我想了解是否可以根据URL字符串参数,从两个不同版本的网站上提供服务。

例如:我的服务器上有两个安装:domain.comwebsite-1 & domain.comwebsite-2。

  • 我的服务器上有两个安装:domain.comwebsite-1 & domain.comwebsite-2。
  • 如果终端用户访问domain.commain?showads=yes -> 将网站作为domain.comwebsite-1服务。
  • 如果终端用户访问域名domain.commain -> 将网站作为domain.comwebsite-2服务。

注意 这不是一个重定向的问题,我只是想用同样的URL来服务。

p.s. 我在Apache服务器上运行一个WordPress网站。

我愿意接受任何通过PHP、WordPress或Apache (.htaccess)配置的解决方案。

谢谢你

php wordpress apache .htaccess url
1个回答
1
投票

你需要使用一个条件来评估查询字符串。

RewriteEngine on

RewriteCond %{QUERY_STRING} (?:^|&)showads=yes(?:&|$)
RewriteRule ^/?(.*)$ /website-1/$1 [END]

RewriteRule ^/?(.*)$ /website-2/$1 [END]

如果你使用上面的规则收到一个内部服务器错误(http状态500),那么很可能你操作的是一个非常老版本的apache http服务器。你会看到一个明确的提示,即不支持的 [END] 在这种情况下,你的http服务器错误日志文件中的标志。你可以尝试升级或者使用旧的 [L] 标志,在这种情况下,它可能也会同样工作,尽管这取决于你的设置。

这个实现同样可以在http服务器主机配置或分布式配置文件(".htaccess "文件)中使用。显然,重写模块需要在http服务器中加载,并在http主机中启用。如果你使用分布式配置文件,你需要注意在主机配置中启用它的解释,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

还有一句话:你应该把这些规则放在http服务器的主机配置中,而不是使用分布式配置文件(".htaccess")。这些分布式配置文件增加了复杂性,经常会导致意外行为,很难调试,而且它们真的会拖慢 http 服务器的速度。它们只是作为最后的选择,在你无法访问真正的http服务器主机配置的情况下(阅读:非常便宜的服务提供商),或者对于坚持编写自己的规则的应用程序(这显然是一个安全噩梦)。

© www.soinside.com 2019 - 2024. All rights reserved.