diff --git a/src/server/kiwix-serve.cpp b/src/server/kiwix-serve.cpp index 8a79bfc..90494e3 100644 --- a/src/server/kiwix-serve.cpp +++ b/src/server/kiwix-serve.cpp @@ -288,12 +288,42 @@ static int accessHandlerCallback(void *cls, /* Try first to load directly the article if exactly matching the pattern */ std::string patternCorrespondingUrl; if (reader != NULL) { + pthread_mutex_lock(&readerLock); + bool found = false; + + /* Try to see if there is an article with this title */ reader->getPageUrlFromTitle(patternString, patternCorrespondingUrl); + found = !patternCorrespondingUrl.empty(); + + /* Try with first letter uppercase */ + if (!found) { + patternString = kiwix::ucFirst(patternString); + reader->getPageUrlFromTitle(patternString, patternCorrespondingUrl); + found = !patternCorrespondingUrl.empty(); + } + + /* Try with first letter lowercase */ + if (!found) { + patternString = kiwix::lcFirst(patternString); + reader->getPageUrlFromTitle(patternString, patternCorrespondingUrl); + found = !patternCorrespondingUrl.empty(); + } + + /* Try with title words */ + if (!found) { + patternString = kiwix::toTitle(patternString); + reader->getPageUrlFromTitle(patternString, patternCorrespondingUrl); + found = !patternCorrespondingUrl.empty(); + } + pthread_mutex_unlock(&readerLock); + + /* If article found then redirect directly to it */ if (!patternCorrespondingUrl.empty()) { httpRedirection="/" + humanReadableBookId + "/" + patternCorrespondingUrl; } + } /* Make the search */