【问题标题】:Add query string if there is none如果没有,则添加查询字符串
【发布时间】:2018-02-11 21:20:33
【问题描述】:

是否可以检查页面是否有查询字符串,如果没有则添加一个?

我目前正在使用 301 重定向,但我想知道是否有更快/更清洁的方法?

示例:如果用户转到website.com/referral,那么他们将被重定向到website.com/referral?code

如果用户转到website.com/referral?code2,那么他们不会被重定向。

谢谢!

编辑:我不介意它是客户端还是服务器端,但我更喜欢使用最干净且对用户影响最小的任何方法。

编辑 2: 这是我尝试使用重写规则后的 htaccess。但是,当访问 /referral 时没有任何反应。

RewriteEngine On

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^referral/?$ /referral.php?123

Options -Indexes
ErrorDocument 403 /404.php
ErrorDocument 404 /404.php


# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]


# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]


RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [NC,L]

【问题讨论】:

  • 你有没有尝试过?
  • 你希望它是客户端还是服务器端?
  • 您想要 Javascript 解决方案吗?
  • 这并不重要。我更喜欢使用最干净的。
  • 我目前正在使用 301 重定向,但想知道是否有什么对用户来说不那么混乱/更快

标签: javascript .htaccess redirect url-redirection


【解决方案1】:

您可以在服务器端使用 mod_rewrite 来避免额外的页面加载。检查%QUERY_STRING是否为空(与^$比较),如果是,则重定向到另一个页面。如果不是,什么也不做:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^referral/?$ /referral.php?code

%{QUERY_STRING} reference

【讨论】:

  • 它似乎对我不起作用。我已将当前的 htaccess 添加为对原始帖子的编辑
  • 您可能需要重新排序一些规则。 L 标志告诉 Apache 如果匹配就停止检查以下规则,因此它可能不会通过。
  • 我已将它移到顶部,但它似乎仍然无法正常工作。感谢您的帮助!
  • 如何将 L 标志添加到该规则?也许它仍然符合你在底部的包罗万象的规则。另外,它应该是什么确切的 URL?它实际上是 /referral(如域的根)吗?
  • 添加 L 没有帮助。是的,网址是https://www.website.com/referral
【解决方案2】:

寡妇位置

如果window.location.search 返回一个空字符串,则没有查询参数。

然后您可以使用此行 window.location.search = "key=value" 设置查询参数

注意

  • 如果您这样做,页面将刷新。
  • 它在主流浏览器中得到完全支持,请参阅here
  • 这里给出的答案假设您可以访问窗口对象(即:您是客户端)
  • 这个解决方案也有点“脏”,因为它会加载页面,然后从客户端重定向(处理这个问题的更好方法是在服务器上)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 2018-12-21
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多