在 apache 中创建一个不重定向的重写查询字符串

Posted

技术标签:

【中文标题】在 apache 中创建一个不重定向的重写查询字符串【英文标题】:Create a rewrite query string in apache which is not redirecting 【发布时间】:2015-07-18 12:58:57 【问题描述】:

我想将所有流量从subdomain.domain.com 重定向到subdomain.domain.com/?appselect=app1

我在这里遵循了一些示例:Rewrite query string in .htaccess 但由于某种原因,它们不为我工作。这是我到目前为止所拥有的:

RewriteEngine On
RewriteRule ^/$ /?appselect=app1 [PT,L]

但它只是转到同一页面:subdomain.domain.com

对此的任何帮助将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

基本上做这样的事情会奏效。它适用于我的服务器。

RewriteEngine On

RewriteCond %HTTP_HOST ^subdomain\. [NC]
RewriteRule ^/?$ /?appselect=app1 [QSA,L,R=302]

【讨论】:

【参考方案2】:

如果你想重定向然后添加R标志:

RewriteEngine On

RewriteCond %HTTP_HOST ^subdomain\. [NC]
RewriteCond %QUERY_STRING !(^|&)appselect=app1 [NC]
RewriteRule ^/?$ /?appselect=app1 [QSA,L,R=302]

【讨论】:

谢谢@anubhava,但我得到了这个错误:这个网页有一个重定向循环 再问一个问题,我打算将来强制使用 SSL。你认为这会让我放弃这条规则并创建一个全新的规则,还是我可以回收这条规则以使其强制使用 https?而且,是否可以从地址栏中隐藏真实的 URL,只向用户显示subdomain.domain.com,这样用户就看不到附加到 URL 的查询字符串?非常感谢您的帮助! 如果你想隐藏真实的 URL 然后从上面的 URL 中删除 R=302。并且每当您决定使用 SSL 时,请在此规则之前使用该重定向规则。 感谢 anubhava,我删除了 R=302,它现在显示的是 apache 测试页面,所以要去别的地方。 没有问题,伙计。只是为了让您知道 Julio 的回答会导致重定向循环。【参考方案3】:

试试

RewriteRule ^$ /?appselect=app1 [PT,L]

【讨论】:

感谢您的回复,但它转到同一页面:subdomain.domain.com

以上是关于在 apache 中创建一个不重定向的重写查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将查询字符串附加到内部重定向

apache_conf 如何在.NET MVC4中创建自定义BundleTransform,特别是为了不重命名变量。因为我找不到这个

Firebase SPA 重写规则不重定向到 index.html

如何在 IIS 中创建多个自定义 503 页面

HTTP 重定向不重定向

Apache 的带有 PHP 标头的 mod_proxy_html("Location:...");不重定向