Jump to content
jarvis

301 Redirect Regex

Recommended Posts

Hi All,

 

I'm hoping someone can help as I'm new to regex and it's driving me mad.

 

I have a bunch of URLs and it basically follows the format of:

/employer/company-name/various-pages

 

What I need to do, is redirect all the various-pages as they no longer exist. So the URL becomes:

/employer/company-name/

 

The regex I have is as follows:

\/employer\/(.+?)\/[a-z0-9\-]+\/ \/employer\/(.+?)\/

 

The issue I have, I need to make company-name a variable but do an exact match

 

Any help is very much appreciated!

 

Thanks in advanced

Share this post


Link to post
Share on other sites
Posted (edited)

How are you planning to do the redirect? With a 404 handler?

 

In your site htaccess, let's assume you have this:

 

errordocument 404 /404.php
In your 404.php script you can start with some redirect code that parses the url to find a company-name you want to redirect for. There are a number of different ways to do this, but this one is commonly used:

 

$urlpath = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
// You should have just the url path, ie.   employer/company-name/foo...
Now you can simply explode to get the pieces, no need for regex at all.

 

Lastly you simply need to do whatever checking is appropriate to determine if you need to redirect or show a 404 page. This could be any weird url, so you'd have to flesh out the different possibilities and catch them (for example, what if $dirlist has only 1 entry? Otherwise it's pretty simple comparison logic:

 

$companylist = array('company1-name', 'company2-name', etc.);

$dirlist = explode('/', $urlpath);


if ($dirlist[0] == 'employer') {
    if (in_array($dirlist[1], $companylist)) {
        header('HTTP/1.1 301 Moved Permanently');
	header("Location: /employer/{$dirlist[1]}/");
	exit();
    }
}
// Follow this with your 404 Page markup
Edited by gizmola
Had a few php errors

Share this post


Link to post
Share on other sites

I'm not trying to undermine gizmola here.  It's a fine answer.  But since the topic of recognizing a name showed up, here's an interesting post:  in_array vs strpos for performance in php.  It concerns the fastest way to find that needle (within some constraints).

https://stackoverflow.com/questions/21070691/in-array-vs-strpos-for-performance-in-php#21070786

If posting links are not welcome here, administrator, feel free to nuke the post.  Thanks.

Share this post


Link to post
Share on other sites

This situation is a little more complex than just finding a needle in a haystack. There are slashes to consider. And the exact location of that needle. And the trailing slash after the company name. It's possible to do with just string functions, of course, but the result would be complex enough not to be worth it.

Optimizing PHP code for microseconds is not worth it - PHP just isn't efficient enough for it to matter. Readability is almost always more important.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.