How to redirect ALL URLs via .htaccess so that ALL urls ending with -text/ are redirected to (url)/, removing the -text part.
For example, ALL urls ( with word -text/ ) :
https://www.example.com/example-text/
to
https://www.example.com/example/
CodePudding user response:
To remove -text at the end of the URL-path (before the final slash) you could do something like the following at the top of your root .htaccess file (before the # BEGIN WordPress section).
For example:
RewriteRule (. )-text/$ /$1/ [R=302,L]
No other directives are required (since the RewriteEngine On directive is in the WordPress code block that follows).
The $1 backreference (in the substitution string) contains the URL-path that precedes -text/ at the end of the URL-path.
This applies to any URL that ends in -text/. If it should only apply to URLs that contain a single URL-path segment (as in your example), then you can modify the RewriteRule pattern as follows:
RewriteRule ^([^/] )-text/$ /$1/ [R=302,L]
This will match /example-text/ (single path segment) as before, but not /foo/bar-text (two path segments).
Note that these are 302 (temporary) redirects. If this is intended to be permanent then change it to a 301, but only once you have tested that it works as intended. 301s are cached persistently by the browser by default so can make testing problematic.
CodePudding user response:
This is not exactly your answer
But I put this answer here so that maybe it will solve the problem of some other people
function forward_to_url(){ $self = $_SERVER["REQUEST_URI"]; //The string you want to find $itemCheck = "url"; $needle = $itemCheck. '/'; //Any Address You want redirect $forwardlink = '/'.preg_replace('/'.strtolower($itemCheck).'/','',strtolower($self)); $length = strlen($needle); $urlend= substr($self, -$length); if ($urlend == $needle or $urlend == $itemCheck) { wp_redirect($forwardlink, 301); } } add_action('template_redirect', 'forward_to_url');
