Is there a module for Drupal that would allow me to perform redirects based on parts of the URL?
For example, if the URL contains this-string-to-redirect, e.g. example.com/this-string-to-redirect/node/content, then redirect to another path.
If you want to do this yourself, quick and dirty, it would be something like this:
function yourmodule_init() {
$foo=drupal_get_path_alias($_GET['q']);
$bar=explode('/',$foo);
if ($bar[0]=='this-string-to-redirect') {
$bar[0]='redirect-me-here';
}
$baz=implode('/',$bar);
drupal_goto($baz);
}
You might also want/need to throw in a weight of -1 to make sure your module runs early by putting:
function yourmodule_install() {
db_query('UPDATE {system} SET weight = -1 WHERE name = "yourmodule"');
}
in yourmodule.install but a quick look just now shows globalredirect's weight at the default of 0 so this may be unneeded.
If the Path Redirect module (whose Drupal 7 version is the Redirect module) doesn't help you, it might be worth taking a look at Global Redirect as well.
Path redirect
This module allows you to specify a redirect from one path to another path or an external URL, using any HTTP redirect status.
Global Redirect
GlobalRedirect is a simple module which…
- Checks the current URL for an alias and does a 301 redirect to it if it is not being used.
- Checks the current URL for a trailing slash, removes it if present and repeats check 1 with the new request.
- Checks if the current URL is the same as the site_frontpage and redirects to the frontpage if there is a match.
- Checks if the Clean URLs feature is enabled and then checks the current URL is being accessed using the clean method rather than the 'unclean' method.
- Checks access to the URL. If the user does not have access to the path, then no redirects are done. This helps avoid exposing private aliased node's.
- Make sure the case of the URL being accessed is the same as the one set by the author/administrator. For example, if you set the alias "articles/cake-making" to node/123, then the user can access the alias with any combination of case.
- Most of the above options are configurable in the settings page. In Drupal 5 you can access this after enabling the globalredirect_admin module. In Drupal 6, the settings page is bundled into the module.
RedirectMatch 301 path-to-redirect(.*) new-path/$1
if the rest of the path is identical