Что ж, есть способ сделать это в основном пространстве имен , по крайней мере, чтобы отредактированные пользователем страницы имели URL-адреса, разделенные строчными буквами и разделенные дефисом.
Вы начинаете с того, что вручную настраиваете страницы на строчные и разделенные дефисом. Первоначальная проблема заключается в том, что ваши внутренние ссылки теперь должны иметь тире, что исключает стандартный стиль внутренних ссылок простым языком и делает их практически непригодными для использования:
For examples of this see [[making-mediawiki-links-lowercase|making mediawiki links lowercase]].
Создание нового wikilink больше не добавляет пару двойных квадратных скобок; весь текст ссылки должен быть переписан (и, при желании, переименован в трубу для удобства чтения).
Но есть способ переписать только ссылку на ссылки. Сначала внесите два изменения в LocalSettings.php:
$wgCapitalLinks = False; # like mentioned above: make MW not capitalize the page titles
$wgHooks['LinkEnd'][] = "seoUrls"; # add a hook to rewrite the links
function seoUrls($dummy, Title $target, array $options, &$html, array &$attribs, &$ret) {
$attribs = str_replace("_", "-", $attribs);
return True;
}
Это переписывает часть внутренних ссылок, чтобы использовать тире, а не подчеркивания, оставляя остальную часть якоря нетронутой.
Затем используйте CSS, чтобы скрыть (или изменить файл шаблона, чтобы удалить) обычный заголовок на тех страницах с пользовательским контентом. CSS будет что-то вроде:
.ns-0.action-view #firstHeading, /* main */
.ns-14.action-view #firstHeading /* categories */
{
display: none
}
Вы делаете хотите оставить заголовок для страниц без какого-либо пользовательского контента, например, для редактирования и специальных страниц. Я обнаружил, что нужно скрыть только пространства имен 0 (основное) и 14 (категории).
Наконец, вместо заголовка, поставляемого Mediawiki, присвойте странице заголовок, добавив h1 в начало самого содержимого страницы.
Возможно, вы также захотите переписать все URL с подчеркиванием, чтобы они были также тире:
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
Проблемы
- Обнаружение несуществующей страницы не совсем точно, потому что страницы, которые он ищет, имеют пробелы, а не тире. Однако, если вы удалили все старые страницы с пробелами в заголовке, это не будет проблемой.
- Поскольку начальная буква теперь чувствительна к регистру, внутренние ссылки требуют переименования, когда они являются первым словом предложения.
- Содержание и ссылки на встроенный раздел редактирования будут работать по-разному; теперь они запускаются на каждой странице из-за h1.
Преимущества
- Вы можете делать заголовки как угодно. Мне нравится использовать страницы категорий, чтобы иметь контент, но мне не нравится заголовок "Category: Blah".
- Вы также можете указывать в заголовке страницы недопустимые символы MediaWiki или символы, не входящие в ASCII, без использования URL-адреса.