DokuWiki

It's better when it's simple

Инструменты пользователя

Инструменты сайта


ru:rewrite

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
ru:rewrite [2011-01-10 06:00] – [URL-преобразование] temirgaleevru:rewrite [2024-04-13 07:11] (текущий) 95.165.91.33
Строка 1: Строка 1:
 ====== URL-преобразование ====== ====== URL-преобразование ======
  
-По умолчанию DokuWiki не производит преобразования URL ((URL rewriting)), что приводит к использованию URL подобных такому:+По умолчанию «[[dokuwiki|ДокуВики]]» не производит преобразования URL((URL rewriting)), что приводит к использованию URL подобных такому:
  
-%%http://example.com/doku.php?id=page%%+<code>http://example.com/doku.php?id=page</code>
  
 Такие URL выглядят довольно страшненько и, кроме того, плохо индексируются поисковыми машинами. Такие URL выглядят довольно страшненько и, кроме того, плохо индексируются поисковыми машинами.
  
-Выходом из этой ситуации является использование URL-преобразования. DokuWiki поддерживает два метода URL-преобразования, которые можно указать в настройке [[config:userewrite]]. Один использует возможности преобразования обеспечиваемые веб-сервером, другой справляется с преобразованиями средствами самого DokuWiki. Возможные значения опции [[config:userewrite]] приведены в следующей таблице.+Выходом из этой ситуации является использование URL-преобразования. «ДокуВики» поддерживает два метода URL-преобразования, которые можно указать в настройке «[[ru:config:userewrite]]». Один использует возможности преобразования обеспечиваемые веб-сервером, другой справляется с преобразованиями средствами самой «ДокуВики». Возможные значения опции «[[ru:config:userewrite]]» приведены в следующей таблице.
  
 ^ Значение ^ Описание ^ Пример URL ^ ^ Значение ^ Описание ^ Пример URL ^
 | 0 | Преобразование URL не используется. Это значение по умолчанию. | %%http://example.com/dokuwiki/doku.php?id=wiki:syntax%% | | 0 | Преобразование URL не используется. Это значение по умолчанию. | %%http://example.com/dokuwiki/doku.php?id=wiki:syntax%% |
-| 1 | Преобразование URL средствами веб-сервера.                     | %%http://example.com/dokuwiki/wiki:syntax%%          +| 1 | Преобразование URL средствами веб-сервера.                     | %%http://example.com/dokuwiki/wiki:syntax%%             
-| 2 | Преобразование URL делается самим DokuWiki                   | %%http://example.com/dokuwiki/doku.php/wiki:syntax%% |+| 2 | Преобразование URL делается самой «ДокуВики»                 | %%http://example.com/dokuwiki/doku.php/wiki:syntax%%    | 
 + 
 +Преобразование URL отключено по умолчанию потому, что оно требует дополнительных настроек помимо установки значения самой [[ru:config:userewrite|опции]]. Рассмотрением этих настроек мы и займёмся далее. 
 + 
 +**К сведению.** Чтобы опробовать примеры, излагаемые в статье, просто добавьте или измените строку в файле ''conf/local.php'' следующим образом: ''$conf['userewrite'] = N'', где N равно 1 или 2 (ничего делать не нужно, если хотите N равное 0). 
 + 
 +===== Метод 0: редактирование php-кода, замена имени стартового файла ===== 
 +Далее речь пойдет о замене стартовой страницы “doku.php, если вам вдруг нужно ее переименовать, скажем, по локальным причинам (это имя может нехорошо звучать на разных языках). Я использую Apache но думаю, что это не имеет значения.. 
 +  * Если вы хотите изменить имя папки (по умолчанию 'dokuwiki' - например на: 'mywiki'), никаких DokuWiki  настроек не потребуется. 
 +  * Если вы хотите изменить имя стандартного файла 'doku.php' (например на: 'start.php'): 
 +    1. Отредактируйте файл 'index.php' (что в папке /dokuwiki) 
 +<code php>header("Location: start.php");</code> 
 + 
 +2. Отредактируйте файл <del>'/inc/init.php'</del> 'inc/preload.php' (в папке /dokuwiki), создайте, если его нет. inc/preload.php не является частью вики по умолчанию, поэтому не будет перезаписан во время установки обновлений. 
 +<code php><?php 
 +if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','start.php');</code> 
 +Это все! 
 + 
 +Если вы нашли еще php-файлы на редактирование, пожалуйста, укажите их здесь. 
 + 
 +С ув. Bronek 
  
-Преобразование URL отключено по умолчанию потому, что оно требует дополнительных настроек помимо установки значения самой [[config:userewrite|опции]]. Рассмотрением этих настроек мы и займемся далее. 
  
-**К сведению** Чтобы опробовать примеры, излагаемые в статье, просто добавьте или измените строку в файле conf/local.php следующим образом: $conf['userewrite'] = N, где N равно 1 или 2 (ничего делать не нужно, если хотите N равное 0).ф 
 ===== Метод 1: с помощью веб-сервера ===== ===== Метод 1: с помощью веб-сервера =====
  
-| $conf['userewrite'1; | +:!: Не забудьте установить следущие опции в Настройках вики ''/start?do=admin&page=config'' 
-Опишем эти настройки для разных веб-серверов.+  * Удобочитаемые адреса (URL): **.htaccess** 
 +  * Использовать слэш в качестве разделителя именных зон в URL: [**x**] 
 +Иначе правила URL-преобразований не будут работать. 
 + 
 +==== Hiawatha ==== 
 +→ [[install:hiawatha#URL-преобразования для веб-сервера Hiawatha]]
  
 ==== Apache ==== ==== Apache ====
  
-Преобразование URL в Apache делается с помощью модуля **mod_rewrite** для [[http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html|первой]] или [[http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html|второй]] версии Apache. Этот модуль активируется в httpd.conf указанием следующей строки (убедитесь, что она не закоментирована):+Преобразование URL в Apache делается с помощью модуля **mod_rewrite** для [[http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html|первой]] или [[http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html|второй]] версии Apache. Этот модуль активируется в ''httpd.conf'' указанием следующей строки (убедитесь, что она не закоментирована):
  
 <code apache> <code apache>
Строка 30: Строка 53:
 </code> </code>
  
-Во многих клонах Linux (Ubuntu, Debian и т.д.) вы можете активировать mod_rewrite так:+Во многих клонах Linux (Ubuntu, Debian и т. д.) вы можете активировать ''mod_rewrite'' так:
  
 <code bash> <code bash>
Строка 36: Строка 59:
 </code> </code>
  
-Настройка модуля mod_rewrite делается с помощью так называемых **правил преобразования** (rewrite rules), которые могут быть определены как в основном файле настройки сервера или в файле .htaccess в основной директории DokuWikiDokuWiki поставляется с файлом .htaccess.dist, содержащим необходимые (правда, закомментированые) правила преобразования для метода 1. Для активации URL-преобразования просто скопируйте этот файл в .htaccess и раскомментируйте строки.+Настройка модуля ''mod_rewrite'' делается с помощью так называемых **правил преобразования** (rewrite rules), которые могут быть определены как в основном файле настройки сервера или в файле ''.htaccess'' в основной директории «ДокуВики»«ДокуВики» поставляется с файлом ''.htaccess.dist'', содержащим необходимые (правда, закомментированые) правила преобразования для метода 1. Для активации URL-преобразования просто скопируйте этот файл в ''.htaccess'' и раскомментируйте строки.
  
 <code apache> <code apache>
Строка 55: Строка 78:
 Предположим, что ваш нормальный (при userewrite=0) URL выглядит так http://www.whatever.com/projects/documents/doku.php. Предположим, что ваш нормальный (при userewrite=0) URL выглядит так http://www.whatever.com/projects/documents/doku.php.
 Тогда вам нужно написать в этой строке ''RewriteBase /projects/documents''. Тогда вам нужно написать в этой строке ''RewriteBase /projects/documents''.
-Однако, иногда эта строка не нужна  вовсе.+Однако, иногда эта строка не нужна вовсе.
  
 === Некоторые замечания === === Некоторые замечания ===
  
-Файл .htaccess принимается во внимание только, если это разрешено в основном файле конфигурации Apache. Многие инсталляции Apache по умолчанию этого не делают. Для разрешения попробуйте добавить в httpd.conf следующее:+Файл ''.htaccess'' принимается во внимание только, если это разрешено в основном файле конфигурации Apache. Многие инсталляции Apache по умолчанию этого не делают. Для разрешения попробуйте добавить в ''httpd.conf'' следующее:
  
 <code apache> <code apache>
Строка 67: Строка 90:
 </code> </code>
  
-PS: В примере выше в ''AllowOverride'' указанны только опции необходимые для работы в дефолтной конфигурации. Если для вас это не работает, попробуйте разрешить все ''AllowOverride All''+P. S. В примере выше в ''AllowOverride'' указанны только опции необходимые для работы в дефолтной конфигурации. Если для вас это не работает, попробуйте разрешить все ''AllowOverride All''
  
-В качестве альтернативы вы можете указать вышеприведенные правила преобразования непосредственно в httpd.conf:+В качестве альтернативы вы можете указать вышеприведенные правила преобразования непосредственно в ''httpd.conf'':
  
 <code apache> <code apache>
 <Directory /path/to/dokuwiki> <Directory /path/to/dokuwiki>
   RewriteEngine on   RewriteEngine on
-  ... rewrite rules here ...+  ... здесь правила преобразования...
 </Directory> </Directory>
 </code> </code>
Строка 80: Строка 103:
 Может понадобиться перегрузка Apache для того, чтобы изменения вступили в силу. Может понадобиться перегрузка Apache для того, чтобы изменения вступили в силу.
  
-Некоторые пользователи сообщают о появлении ошибке "403 Forbidden" после включения поддержки преобразования. Установка опции FollowSymlinks должна решить эту проблему:+Некоторые пользователи сообщают о появлении ошибке «403 --- Forbidden» после включения поддержки преобразования. Установка опции ''FollowSymlinks'' должна решить эту проблему:
  
 <code apache> <code apache>
Строка 89: Строка 112:
 </code> </code>
  
-Приведенные выше правила преобразования отсылают все запросы на несуществующие файлы и директории к основному диспетчеру DokuWiki. +Приведённые выше правила преобразования отсылают все запросы на несуществующие файлы и директории к основному «ДокуВики». Это может быть применено и к виртуальным отображениям (aliases). Некоторые сайты отображают доступ к статистике в виртуальной директории ''/stats''. Для того, чтобы эта виртуальная директория оставалась доступной, вам нужно исключить ее из условий преобразования. Например:
-Это может быть применено и к виртуальным отображениям (aliases). Некоторые сайты отображают доступ к статистике в виртуальной директории /stats. Для того, чтобы эта виртуальная директория оставалась доступной, вам нужно исключить ее из условий преобразования. Например:+
  
 <code apache> <code apache>
Строка 100: Строка 122:
 </code> </code>
  
-Если ваш сайт работает без RewriteBase, например из-за того что вы хоститесь в выделенном VirtualHost, вы должны соответственно изменить правила преобразования.+Если ваш сайт работает без RewriteBase, например из-за тогочто вы хоститесь в выделенном VirtualHost, вы должны соответственно изменить правила преобразования.
  
 <code apache> <code apache>
Строка 254: Строка 276:
  
 Using Apache's **Alias directive** with this option can lead to severe headaches and broken wiki! <= A patch which should solve this problem is available here: [[https://www.trg-oha.de/~sstrickroth/dokuwiki-alias.patch]] Using Apache's **Alias directive** with this option can lead to severe headaches and broken wiki! <= A patch which should solve this problem is available here: [[https://www.trg-oha.de/~sstrickroth/dokuwiki-alias.patch]]
- 
- 
- 
  
 ===== Чистые ID сессий PHP ===== ===== Чистые ID сессий PHP =====
  
-Не смотря на использование "чистыхURL вы можете столкнуться с "параметром DokuWiki" в URL выглядящим как+Несмотря на использование «чистых» URLвы можете столкнуться с «параметром ДокуВики» в URLвыглядящим как:
- +
-Despite using "clean" URLs you may encounter a "DokuWiki" parameter in the URL looking like this:+
  
 <code> <code>
Строка 268: Строка 285:
 </code> </code>
  
-Этот параметр является ID сессии PHPи добавляется самим PHP автоматически. Это абсолютно не связано с преобразованием URL.  +Этот параметр является ID сессии PHP и добавляется самим PHP автоматически. Это абсолютно не связано с преобразованием URL. Для тогочтобы избежать этого, вы можете принудить PHP всегда использовать cookies для работы с сессиямивыставив опцию ''session.use_only_cookies'' в настройках PHP.
-Для того чтобы избежать этого, вы можете принудить PHP всегда использовать cookies для работы с сессиями выставив опцию ''session.use_only_cookies'' в настройках PHP.+
  
-Это обычно делается в файле php.ini (если вы используете сервер хостера, то выясните в его поддержке как можно редактировать этот файл):+Это обычно делается в файле ''php.ini'' (если вы используете сервер хостера, то выясните в его поддержкекак можно редактировать этот файл):
  
 <code ini> <code ini>
-session.use_only_cookies=1+session.use_only_cookies = 1
 </code> </code>
  
-Если вы все еще видите ID сессий, попробуйте еще:+Если вы все ещё видите ID сессий, попробуйте еще:
  
 <code ini> <code ini>
-session.use_trans_sid=0+session.use_trans_sid = 0
 </code> </code>
  
-Если ваш PHP работает как модуль Apache, то у вас есть возможность подправить эти значения в файле .htaccess используя следующий синтаксис:+Если ваш PHP работает как модуль Apache, то у вас есть возможность подправить эти значения в файле ''.htaccess'', используя следующий синтаксис:
  
 <code> <code>
Строка 290: Строка 306:
 </code> </code>
  
-Если вы не можете использовать ни то, ни другое решение (многие вебхостеры запрещают редактирование php.ini и использование php_flag в .htaccess), вам придется редактировать conf/local.php. Заметим, что упомянутые выше настройки не могут быть изменены вызовом ini_set() начиная с версии PHP 4.2.3, поэтому **единственный** способ сделать это - использовать следующее:+Если вы не можете использовать ни то, ни другое решение (многие вебхостеры запрещают редактирование ''php.ini'' и использование ''php_flag'' в ''.htaccess''), вам придется редактировать ''conf/local.php''. Заметим, что упомянутые выше настройки не могут быть изменены вызовом ini_set()начиная с версии PHP 4.2.3, поэтому **единственный** способ сделать это --- использовать следующее: 
 <code php> <code php>
 ini_set('url_rewriter.tags', ''); ini_set('url_rewriter.tags', '');
 </code> </code>
- 
  
 > My problem was that my **session.cookie_domain** was incorrectly set (I'm doing virtual hosting, and the domain name was incorrect). I added <code>php_value session.cookie_domain www.my.domain.com</code> to the appropriate virtualhost in my httpd.conf (though .htaccess would probably work just as well), and the polluted URLs disappeared. Also, if you can't get to your php.ini or apache config, you should be able to use **ini_set('PHP variable', 'value');** to the same effect (it seems that conf/local.php is a good place to put this, as the file is included before the session is started). > My problem was that my **session.cookie_domain** was incorrectly set (I'm doing virtual hosting, and the domain name was incorrect). I added <code>php_value session.cookie_domain www.my.domain.com</code> to the appropriate virtualhost in my httpd.conf (though .htaccess would probably work just as well), and the polluted URLs disappeared. Also, if you can't get to your php.ini or apache config, you should be able to use **ini_set('PHP variable', 'value');** to the same effect (it seems that conf/local.php is a good place to put this, as the file is included before the session is started).
Строка 349: Строка 365:
 # Diff still broken unless none is selected under 'use nice URL' options. You can still enter and link to nice URLs but the DokuWiki program will use normal naming. # Diff still broken unless none is selected under 'use nice URL' options. You can still enter and link to nice URLs but the DokuWiki program will use normal naming.
 </code> </code>
 +
 +Trouble. apache2, php2 (external module), current dokuwiki, configuration in virtual host:
 +<code>
 + <LocationMatch "/(data|conf|bin|inc)/">
 +  Order allow,deny
 +  Deny from all
 +  Satisfy All
 + </LocationMatch>
 + RewriteEngine on
 + RewriteRule ^/_media/(.*) /lib/exe/fetch.php?media=$1  [QSA,L]
 + RewriteRule ^/_detail/(.*) /lib/exe/detail.php?media=$1  [QSA,L]
 + RewriteRule ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2  [QSA,L]
 + RewriteRule ^/$ /doku.php [L]
 + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
 + RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
 + RewriteRule (.*) /doku.php?id=$1  [QSA,L]
 +</code>
 +
 +and request to "site.ru/_media/nasharahsamario.jpg" gives 403 (forbidden) dokuwiki page
 +error log says: client denied by server configuration: /lib/exe
 +rewrite log:
 +<code>
 +85.21.2.184 - - [25/Feb/2011:11:19:52 +0300] [wp.website.ru/sid#b7857b08][rid#b79de0a0/initial] (2) rewrite '/_media/nasharahsamario.jpg' -> '/lib/exe/fetch.php?media=nasharahsamario.jpg'
 +85.21.2.184 - - [25/Feb/2011:11:19:52 +0300] [wp.website.ru/sid#b7857b08][rid#b79de0a0/initial] (2) local path result: /lib/exe/fetch.php
 +85.21.2.184 - - [25/Feb/2011:11:19:52 +0300] [wp.website.ru/sid#b7857b08][rid#b79de0a0/initial] (1) go-ahead with /lib/exe/fetch.php [OK]
 +85.21.2.184 - - [25/Feb/2011:11:19:52 +0300] [wp.website.ru/sid#b7857b08][rid#b79dfe68/initial/redir#1] (2) init rewrite engine with requested uri /error/HTTP_FORBIDDEN.html.var
 +85.21.2.184 - - [25/Feb/2011:11:19:52 +0300] [wp.website.ru/sid#b7857b08][rid#b79dfe68/initial/redir#1] (2) rewrite '/error/HTTP_FORBIDDEN.html.var' -> '/doku.php?id=/error/HTTP_FORBIDDEN.html.var'
 +</code>
 +thx
 +
 +----
 +
 +  * [[http://shcherbyna.my-board.org/dokuwiki|DokuWikiStick local config]]
 +1) __C:\..\DokuWikiStick\server\conf\httpd.conf__
 +<code perl httpd.conf>
 +# absolute minimum configuration for DokuWiki on a Stick
 +# change the Listen directive if you want to use a different port
 +...
 +...
 +
 +# Configure the path to php.ini
 +PHPIniDir php
 +
 +# http://localhost:8800/doku.php?id=ru:start > http://localhost:8800/ru/start
 +<Directory ./../dokuwiki>
 +    AllowOverride AuthConfig FileInfo Limit
 +</Directory>
 +
 +
 +AcceptPathInfo off
 +KeepAlive on
 +KeepAliveTimeout 15
 +TimeOut 30
 +DirectoryIndex index.html index.php
 +</code>
 +
 +
 +2) __C:\..\DokuWikiStick\dokuwiki\.htaccess>__
 +<code perl .htaccess>
 +## http://localhost:8800/doku.php?id=ru:start > http://localhost:8800/ru/start
 +
 +RewriteEngine on
 +
 +RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
 +RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
 +RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L] 
 +RewriteRule ^$                        doku.php  [L]
 +RewriteCond %{REQUEST_FILENAME}       !-f
 +RewriteCond %{REQUEST_FILENAME}       !-d
 +RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
 +RewriteRule ^index.php$               doku.php
 +
 +</code>
 +
 +3) __C:\..\DokuWikiStick\dokuwiki\conf\local.php__
 +<code php local.php>
 +..
 +$conf['userewrite'] = 1; // .htaccess
 +$conf['useslash'  = 1;
 +$conf['fnencode'  = 'utf-8';
 +..
 +</code>
 +
 +
ru/rewrite.1294635606.txt.gz · Последнее изменение: 2011-01-10 06:00 — temirgaleev

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki