I have created a new content type with a body and multiple fields.

I use the following query string


to change the content of the node's body according to the value of the value of article.

The full URL looks like this (with my path alias I created):


I would like to clean up the url to look like this instead:


How can I do this with Drupal 7?

  • Where is the ?article=referral-partners coming from? – Weston Wedding Aug 12 '14 at 23:20
  • My own custom block is generating it. – joshmmo Aug 12 '14 at 23:33
  • Okay, so you're looking for "How can I use the cleaned up URL" rather than how to clean up the URL? – Weston Wedding Aug 12 '14 at 23:41
  • uh yeah I guess that would be a better formed question sorry. I can generate my links in a cleaned form no problem, but how will I get that cleaned form as php variables? – joshmmo Aug 13 '14 at 3:07
  • I think you can add a URL alias for userguides/contacts/my-first-user-guide?article=referral-partners to points to userguides/contacts/my-first-user-guide/article/referral-partners try it out here: admin/config/search/path/add – Pontus Nilsson Aug 13 '14 at 6:52

Unless there's a chance your URL is going to change a lot as far as "depth" goes, you can use arg() to access any element in the path.

If your path is userguides/contacts/my-first-user-guide/article/referral-partners, you would use something like this...

$article = arg(4);     // $article is set to 'referral-partners'

... and then just check the value of $article. If the code can potentially be run on nodes or pages you don't want it to, then you'd also probably want to check other "args" for safety. Generally Drupal will let you tack on all kinds of extra path elements without needing to go through extra hoops as long as the initial path is a real one.

| improve this answer | |
  • I had to use subautopath module to get it to work on alias URLs as well. But this is the approach I took. Thanks. Edit: Does drupal filter/sanitize this already? – joshmmo Aug 14 '14 at 23:46
  • No sanitation involved in the function; it really just runs explode() on the path and then uses caching (drupal_static()) to avoid having to run explode() every time it's called. – Weston Wedding Aug 15 '14 at 17:12

You can use something like this on your custom module for the redirects with the query strings.

 * custom redirect with query string
 * module implements hook_init()

function MyModule_init() {
  if ($_GET['q'] == 'userguides/contacts/my-first-user-guide/article/referral-partners') {
    drupal_goto('userguides/contacts/my-first-user-guide', array('query' => array('article' => 'referral-partners')));
| improve this answer | |

I was able to accomplish this by using the module Subpathauto

Instead of using query parameters like this: ?article=referral-partners I just use them like this /my-arg-i-want and I am able to get them in my module using arg(2).

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.