Looking for guidance rewriting specific URL's
I have changed the CMS to my site and it has rewritten the URLs to be more friendly but I have 20 pages which are linked on differ开发者_Python百科ent sites across the web. I want when people click those old links for them to be redirected to their new respective posts.
I was at first thinking of using a PHP array with a javascript redirect but now I'm thinking .htaccess mod-rewrite would be best.
Whats the best way to have specific URLs redirect to their new URLs?
Use the .htaccess file for redirects. For example:
# This allows you to redirect index.html to a specific url
Redirect /index.html http://example.com/location/
Add some regex to match your rewrites and send to the dynamically created remote url. For example:
# Dynamic redirect
RedirectMatch 301 yourUrl/\(.*)\$ http://external.com/someUrl.html?dynamicVal=$1
That would send ...yourUrl/123 -> http://external.com/someUrl.html?dynamicVal=123
If you are talking about URLs on your pages, then the best way is to edit all such pages with current proper URLs.
If you are talking about "what to do when someone hits my old URL (from their bookmarks or by clicking a link on another site, for example) then the best way is to redirect (with code 301) such requests to a new location using Apache's URL Rewrite module.
Example:
# Activate Rewrite Engine
RewriteEngine On
# redirect to another page on the same site
RewriteRule ^mypage.php /other/mypage.php [R=301,L,QSA]
# redirect to another page on ANOTHER site
RewriteRule ^mypage.php http://www.anothersite.com/mypage.php [R=301,L,QSA]
Here is the link to Apache's manual for mod-rewrite.
Another useful place -- Mod_Rewrite Forums.
Apache supports different modules to rewrite/redirect requested URIs:
- mod_alias with
Alias
andAliasMatch
for internal rewriting, as well asRedirect
andRedirectMatch
for external redirecting - mod_rewrite with
RewriteRule
for internal rewriting and external redirecting
The main difference between the mod_alias and mod_rewrite directives is that mod_alias’s Alias
and Redirect
directives work with path prefix patterns while the other directives (i.e. AliasMatch
, RedirectMatch
, and RewriteRule
) work with regular expressions.
A path prefix pattern is always always matched when it’s a qualified prefix of the requested path and the remaining path segments are automatically appended to the target path. Here’s an example:
Redirect /foo/bar http://other.example/quux
If /foo/bar
is requested, it’s getting redirected to http://other.example/quux
; likewise /foo/bar/baz
is getting redirected to http://other.example/quux/baz
. Alias
works alike but just internally.
In opposite to that, AliasMatch
, RedirectMatch
, and RewriteRule
work with regular expressions and can be used not just to match path prefixes. Here’s an example:
RedirectMatch ^/foo/bar$ http://other.example/quux
If /foo/bar
is requested, it’s getting redirected to http://other.example/quux
(just like the Redirect
example above). But if /foo/bar/quux
is requested, it’s not getting redirected as ^/foo/bar$
doesn’t match /foo/bar/quux
.
Futher differences between mod_alias and mod_rewrite are that mod_rewrite can also examine other parts of the URI except the path and even HTTP request header fields. It does also allow more complex operations with multiple conditions.
精彩评论