繁体   English   中英

如何通过htaccess将任何子域重定向为GET参数?

[英]How do I redirect any subdomain through htaccess as GET parameter?

因此,如果用户输入london.abcd.com,则需要转到abcs.com/show.php?loc=london,同时仍显示URL london.abcd.com

另一个示例:(输入)sydney.abcd.com->(转到)abcd.com/show.php?loc=sydney,URL显示sydney.abcd.com

如何通过本地主机(在Windows上为XAMPP)和实际在线服务器的HTACCESS来实现此目的?

到目前为止已经尝试过了,但是没有用。 将我重定向回index.php

RewriteCond %{HTTP_HOST} !^(www)\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.com [NC]
RewriteRule (.*) https://www.%2.com/show.php?loc=%1 [NC,L]

这将是您建议的有效变体。 但是请注意,它将忽略请求的URL中指定的任何路径:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.exmaple\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.example\.com$
RewriteRule ^ https://www.example.com/show.php?loc=%1 [R=301,QSA]

一个好主意是从302临时重定向开始,然后在确定一切都已正确设置之后,才将其更改为301永久重定向。 这样可以防止在尝试时缓存问题...

在对该答案的评论中,您指出您实际上希望像问题中所写的那样进行重定向,而是内部重写。 因此,不应更改浏览器中的可见URL,而应仅更改内部处理。 稍加修改即可实现:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.exmaple\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.example\.com$
RewriteRule ^ /show.php?loc=%1 [END,QSA]

如果您使用上述规则收到内部服务器错误(http状态500),则很可能是您运行了非常旧版本的apache http服务器。 在这种情况下,您将在http服务器错误日志文件中看到对不支持的[END]标志的明确提示。 您可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起作用,尽管这在一定程度上取决于您的设置。

如果您使用上述规则收到内部服务器错误(http状态500),则很可能是您运行了非常旧版本的apache http服务器。 在这种情况下,您将在http服务器错误日志文件中看到对不支持的[END]标志的明确提示。 您可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起作用,尽管这在一定程度上取决于您的设置。

此规则将在http服务器主机配置或动态配置文件(“ .htaccess”文件)中同样起作用。 显然,重写模块需要加载到http服务器内部并在http主机中启用。 如果使用动态配置文件,则需要注意在主机配置中完全启用了它的解释,并且该解释位于主机的DOCUMENT_ROOT文件夹中。

还有一个一般性说明:您应该始终喜欢将此类规则放在http服务器主机配置中,而不要使用动态配置文件(“ .htaccess”)。 这些动态配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。 仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM