Open a URL based on search query without php “?q=(myTerm)” and instead with a simple “/(myTerm)”

后端 未结 1 1325
囚心锁ツ
囚心锁ツ 2021-01-27 04:47

This is driving me up the wall. I obviously don\'t understand soemthing pretty fundamental, I\'m hoping someone can shed light on the matter.

        
相关标签:
1条回答
  • 2021-01-27 05:39

    The parts of your page are the core behind the search function:

    JavaScript:

    function handleThis(formElm){
        window.location="http://syndex.me/tagged/"+formElm.q.value+"";
        return false;
    }
    

    HTML:

    <form onsubmit="return handleThis(this)" >
        <input type="text" name="q" value=""/>
    </form> 
    

    An event listener is bound to your form, using onsubmit="return handleThis(this)".

    • onsubmit is triggered when the user presses enter, or hits the Search button.
    • Inside the onsubmit attribute (aka event handler), you notice return handleThis(this). This function (which is defined at the same page; look ahead) is called with the this keyword as first argument. this from within the context of an event handler refers to the event listener's owner element, in this case <form>.
      In handleThis(formElm), you notice "http://syndex.me/tagged/"+formElm.q.value. formElm.q refers to an input element called q within the form element. formElem.q.value holds the value of the input element, which contains the search keywords. The just constructed URL is assigned to window.location, which initiates a new request to http://syndex.me/tagged/search_terms.
      After that line, you see return false. Inside the onsubmit event handler, you've seen return handleThis(this). The return value of handleThis is passed to the onsubmit event handler. So, the statement equals onsubmit="return false". This means that the form does not submit itself any more.
    • The action attribute is not defined. As mentioned previously, this is not needed, because the form is not submitted due return false. When an error occurs, or if a user has disabled JavaScript, the form will submit itself to the URL as defined at action. Because the action attribute is not specified, the page's current URL is used instead, http://syndex.me/ in this case. All named form elements are added to the request, so the final URL will be http://syndex.me/?q=search_terms

    To get back to your question, <form action="/tagged"method="get">`:

    • No onsubmit event handler.
    • Because the onsubmit event handler is not specified, the HTML form will be submitted by the browser (an imaginary onsubmit handler would equal return true.
    • The action URL is defined to be /tagged, which translates to a file called "tagged" at the ROOT directory of your host. In this case: http://syndex.me/tagged?q=search_terms. (q=.. is a result from the input element called q).
      When you change action to /tagged/ instead of /tagged, the submitted form will request the following page: http://syndex.me/tagged/?q=search_terms

    When you change /tagged to /search, your form submits to http://syndex.me/search?q=.... As seen through the headers, this location redirects to http://syndex.me/search/....
    This behaviour is likely achieved using a rule defined in .htaccess:

    RewriteEngine On
    RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]
    

    Understood?

    0 讨论(0)
提交回复
热议问题