nginx hide symfony locale from url
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
add a comment |
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
add a comment |
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
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
symfony nginx url-rewriting
edited Nov 26 '18 at 14:32
sof market
asked Nov 26 '18 at 13:15
sof marketsof market
62
62
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
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
add a comment |
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.
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
add a comment |
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.
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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