nginx hide symfony locale from url












1















i have an issue with url rewriting in nginx server. i want to hide symfony's locale from my url so www.example.com/fr/route should be www.example.com/route
my nginx config file has the following :



location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}

# PROD
location ~ ^/app.php(/|$) {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
internal;
}


please help me and thanks a lot in advance.



i already try with .htaccess but nginx doesn't support .htaccess files










share|improve this question





























    1















    i have an issue with url rewriting in nginx server. i want to hide symfony's locale from my url so www.example.com/fr/route should be www.example.com/route
    my nginx config file has the following :



    location / {
    # try to serve file directly, fallback to app.php
    try_files $uri /app.php$is_args$args;
    }

    # PROD
    location ~ ^/app.php(/|$) {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_split_path_info ^(.+.php)(/.*)$;
    include fastcgi_params;
    internal;
    }


    please help me and thanks a lot in advance.



    i already try with .htaccess but nginx doesn't support .htaccess files










    share|improve this question



























      1












      1








      1


      1






      i have an issue with url rewriting in nginx server. i want to hide symfony's locale from my url so www.example.com/fr/route should be www.example.com/route
      my nginx config file has the following :



      location / {
      # try to serve file directly, fallback to app.php
      try_files $uri /app.php$is_args$args;
      }

      # PROD
      location ~ ^/app.php(/|$) {
      fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_split_path_info ^(.+.php)(/.*)$;
      include fastcgi_params;
      internal;
      }


      please help me and thanks a lot in advance.



      i already try with .htaccess but nginx doesn't support .htaccess files










      share|improve this question
















      i have an issue with url rewriting in nginx server. i want to hide symfony's locale from my url so www.example.com/fr/route should be www.example.com/route
      my nginx config file has the following :



      location / {
      # try to serve file directly, fallback to app.php
      try_files $uri /app.php$is_args$args;
      }

      # PROD
      location ~ ^/app.php(/|$) {
      fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_split_path_info ^(.+.php)(/.*)$;
      include fastcgi_params;
      internal;
      }


      please help me and thanks a lot in advance.



      i already try with .htaccess but nginx doesn't support .htaccess files







      symfony nginx url-rewriting






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 26 '18 at 14:32







      sof market

















      asked Nov 26 '18 at 13:15









      sof marketsof market

      62




      62
























          1 Answer
          1






          active

          oldest

          votes


















          2














          Hello there and welcome to the forum.



          As you have tagged your question with url-rewriting, I am assuming that you want to achieve url rewriting instead of something else. i.e. url rewriting isn't "hiding" that part of the url, it is rewriting the url and removing that part - meaning that this information won't be available to you in your symfony project.



          The following nginx rule will do the url-rewriting:



          rewrite ^/fr/(.*)$ /$1 permanent;    


          please note that it might be a good idea in general to use non-permanent option when testing/creating these rules like this:



          rewrite ^/fr/(.*)$ /$1 redirect; 




          updated regarding how to "hide" the locale



          This is something that you would have to do inside your symfony project instead of using nginx. As a warning though, symfony documentation explicitly advises against using this kind of locale hiding (see The locale and the url). But if you for some reason still want to do this kind of locale hiding, I would assume one approach would be to create generic catcher routes for handling your locales - something like this:



          locale_redirect:
          path: /{_locale}/{params}
          controller: AppControllerLocaleRedirectController::locale
          requirements:
          _locale: en|fr|de
          params: '.+'


          And in you controller something like this:



          public function localeAction(Request $request, $locale, $params)
          {
          // set the locale sticky
          // https://symfony.com/doc/current/session/locale_sticky_session.html

          // redirect to the url without the locale
          return new RedirectResponse("/$params");
          }


          I haven't actually tried this code / logic - and wouldn't do this because symfony documentation advises against it (for valid reasons) - so there might be some small issues with this example code / this logic that you need to figure out for yourself if you decide to go this way.






          share|improve this answer


























          • Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

            – sof market
            Nov 27 '18 at 23:39











          • I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

            – ejuhjav
            Nov 28 '18 at 8:39













          • well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

            – sof market
            Nov 28 '18 at 15:50












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53481951%2fnginx-hide-symfony-locale-from-url%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          Hello there and welcome to the forum.



          As you have tagged your question with url-rewriting, I am assuming that you want to achieve url rewriting instead of something else. i.e. url rewriting isn't "hiding" that part of the url, it is rewriting the url and removing that part - meaning that this information won't be available to you in your symfony project.



          The following nginx rule will do the url-rewriting:



          rewrite ^/fr/(.*)$ /$1 permanent;    


          please note that it might be a good idea in general to use non-permanent option when testing/creating these rules like this:



          rewrite ^/fr/(.*)$ /$1 redirect; 




          updated regarding how to "hide" the locale



          This is something that you would have to do inside your symfony project instead of using nginx. As a warning though, symfony documentation explicitly advises against using this kind of locale hiding (see The locale and the url). But if you for some reason still want to do this kind of locale hiding, I would assume one approach would be to create generic catcher routes for handling your locales - something like this:



          locale_redirect:
          path: /{_locale}/{params}
          controller: AppControllerLocaleRedirectController::locale
          requirements:
          _locale: en|fr|de
          params: '.+'


          And in you controller something like this:



          public function localeAction(Request $request, $locale, $params)
          {
          // set the locale sticky
          // https://symfony.com/doc/current/session/locale_sticky_session.html

          // redirect to the url without the locale
          return new RedirectResponse("/$params");
          }


          I haven't actually tried this code / logic - and wouldn't do this because symfony documentation advises against it (for valid reasons) - so there might be some small issues with this example code / this logic that you need to figure out for yourself if you decide to go this way.






          share|improve this answer


























          • Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

            – sof market
            Nov 27 '18 at 23:39











          • I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

            – ejuhjav
            Nov 28 '18 at 8:39













          • well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

            – sof market
            Nov 28 '18 at 15:50
















          2














          Hello there and welcome to the forum.



          As you have tagged your question with url-rewriting, I am assuming that you want to achieve url rewriting instead of something else. i.e. url rewriting isn't "hiding" that part of the url, it is rewriting the url and removing that part - meaning that this information won't be available to you in your symfony project.



          The following nginx rule will do the url-rewriting:



          rewrite ^/fr/(.*)$ /$1 permanent;    


          please note that it might be a good idea in general to use non-permanent option when testing/creating these rules like this:



          rewrite ^/fr/(.*)$ /$1 redirect; 




          updated regarding how to "hide" the locale



          This is something that you would have to do inside your symfony project instead of using nginx. As a warning though, symfony documentation explicitly advises against using this kind of locale hiding (see The locale and the url). But if you for some reason still want to do this kind of locale hiding, I would assume one approach would be to create generic catcher routes for handling your locales - something like this:



          locale_redirect:
          path: /{_locale}/{params}
          controller: AppControllerLocaleRedirectController::locale
          requirements:
          _locale: en|fr|de
          params: '.+'


          And in you controller something like this:



          public function localeAction(Request $request, $locale, $params)
          {
          // set the locale sticky
          // https://symfony.com/doc/current/session/locale_sticky_session.html

          // redirect to the url without the locale
          return new RedirectResponse("/$params");
          }


          I haven't actually tried this code / logic - and wouldn't do this because symfony documentation advises against it (for valid reasons) - so there might be some small issues with this example code / this logic that you need to figure out for yourself if you decide to go this way.






          share|improve this answer


























          • Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

            – sof market
            Nov 27 '18 at 23:39











          • I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

            – ejuhjav
            Nov 28 '18 at 8:39













          • well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

            – sof market
            Nov 28 '18 at 15:50














          2












          2








          2







          Hello there and welcome to the forum.



          As you have tagged your question with url-rewriting, I am assuming that you want to achieve url rewriting instead of something else. i.e. url rewriting isn't "hiding" that part of the url, it is rewriting the url and removing that part - meaning that this information won't be available to you in your symfony project.



          The following nginx rule will do the url-rewriting:



          rewrite ^/fr/(.*)$ /$1 permanent;    


          please note that it might be a good idea in general to use non-permanent option when testing/creating these rules like this:



          rewrite ^/fr/(.*)$ /$1 redirect; 




          updated regarding how to "hide" the locale



          This is something that you would have to do inside your symfony project instead of using nginx. As a warning though, symfony documentation explicitly advises against using this kind of locale hiding (see The locale and the url). But if you for some reason still want to do this kind of locale hiding, I would assume one approach would be to create generic catcher routes for handling your locales - something like this:



          locale_redirect:
          path: /{_locale}/{params}
          controller: AppControllerLocaleRedirectController::locale
          requirements:
          _locale: en|fr|de
          params: '.+'


          And in you controller something like this:



          public function localeAction(Request $request, $locale, $params)
          {
          // set the locale sticky
          // https://symfony.com/doc/current/session/locale_sticky_session.html

          // redirect to the url without the locale
          return new RedirectResponse("/$params");
          }


          I haven't actually tried this code / logic - and wouldn't do this because symfony documentation advises against it (for valid reasons) - so there might be some small issues with this example code / this logic that you need to figure out for yourself if you decide to go this way.






          share|improve this answer















          Hello there and welcome to the forum.



          As you have tagged your question with url-rewriting, I am assuming that you want to achieve url rewriting instead of something else. i.e. url rewriting isn't "hiding" that part of the url, it is rewriting the url and removing that part - meaning that this information won't be available to you in your symfony project.



          The following nginx rule will do the url-rewriting:



          rewrite ^/fr/(.*)$ /$1 permanent;    


          please note that it might be a good idea in general to use non-permanent option when testing/creating these rules like this:



          rewrite ^/fr/(.*)$ /$1 redirect; 




          updated regarding how to "hide" the locale



          This is something that you would have to do inside your symfony project instead of using nginx. As a warning though, symfony documentation explicitly advises against using this kind of locale hiding (see The locale and the url). But if you for some reason still want to do this kind of locale hiding, I would assume one approach would be to create generic catcher routes for handling your locales - something like this:



          locale_redirect:
          path: /{_locale}/{params}
          controller: AppControllerLocaleRedirectController::locale
          requirements:
          _locale: en|fr|de
          params: '.+'


          And in you controller something like this:



          public function localeAction(Request $request, $locale, $params)
          {
          // set the locale sticky
          // https://symfony.com/doc/current/session/locale_sticky_session.html

          // redirect to the url without the locale
          return new RedirectResponse("/$params");
          }


          I haven't actually tried this code / logic - and wouldn't do this because symfony documentation advises against it (for valid reasons) - so there might be some small issues with this example code / this logic that you need to figure out for yourself if you decide to go this way.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 28 '18 at 8:39

























          answered Nov 27 '18 at 8:49









          ejuhjavejuhjav

          1,67311217




          1,67311217













          • Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

            – sof market
            Nov 27 '18 at 23:39











          • I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

            – ejuhjav
            Nov 28 '18 at 8:39













          • well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

            – sof market
            Nov 28 '18 at 15:50



















          • Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

            – sof market
            Nov 27 '18 at 23:39











          • I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

            – ejuhjav
            Nov 28 '18 at 8:39













          • well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

            – sof market
            Nov 28 '18 at 15:50

















          Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

          – sof market
          Nov 27 '18 at 23:39





          Hello and thank you a lot for your clear and useful answer, what about if i need just to hide the locale and not removing it so that it will available for symfony, is that possible and how can i achieve that! and thanks again.

          – sof market
          Nov 27 '18 at 23:39













          I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

          – ejuhjav
          Nov 28 '18 at 8:39







          I updated the answer to cover this option as welll. But as emphasized in the updated answer, the symfony documentation explicitly advises not to use this kind of hiding of the locale parameter from the urls.

          – ejuhjav
          Nov 28 '18 at 8:39















          well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

          – sof market
          Nov 28 '18 at 15:50





          well thank you so much, i will go ahead and use session approach to adapt business logic. best regard

          – sof market
          Nov 28 '18 at 15:50




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53481951%2fnginx-hide-symfony-locale-from-url%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Costa Masnaga

          Fotorealismo

          Sidney Franklin