I have old URL path for all pages
example.com/w/Page_title
Now I changed it to
example.com/Page_title
using Short URL manual for Apache
And the question is: How to make 301 redirects from old path for users that coming back using bookmarks?
my LocalSettings.php
$wgForceHTTPS = true;
$wgScriptPath = "/wiki";
$wgArticlePath = "/$1";
and mod_rewrite:
RewriteEngine On
# Short URL for wiki pages
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]
# Redirect Main Page to /
RewriteRule ^/*$ /index.php?title=Main_Page [L,QSA]
RewriteRule .*\.ico$ - [L]
CodePudding user response:
You need to add a RewriteRule
to do the redirect before the other rules:
RewriteRule \/?w\/(.*) /$1 [R=301,L]
This matches any URL that starts with /w/
and redirects to remove it.
\/?
- An optional starting slash so this rule will work in different contexts (Apache conf and .htaccess)w\/
- Thew/
directory(.*)
- Everything after thew/
in a capturing group that becomes$1
in the target/$1
- Where to redirect toR=301
Make this a permanent (301) redirectL
- Make this the last rewrite rule so that the other rules don't get processed when it matches.
In the end it should look like this with your other rules:
RewriteEngine On
# Redirect old URLs that start with /w/
RewriteRule \/?w\/(.*) /$1 [R=301,L]
# Short URL for wiki pages
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]
# Redirect Main Page to /
RewriteRule ^/*$ /index.php?title=Main_Page [L,QSA]
RewriteRule .*\.ico$ - [L]