mod_rewrite не работает для псевдонима apache

Я создал вики-страницу документации, которую хочу прикрепить к моему основному сайту, используя псевдоним для виртуального хоста. Это позволяет мне получить доступ к вики, перейдя по адресу website.com/documentation. В прошлом я успешно использовал mod_rewrite для псевдонима, но не могу заставить его работать. Псевдоним настроен правильно, так как сайт работает, но правила перезаписи отсутствуют.

Я использую doku wiki, но неважно, что я использую в качестве apache, а не php. Я хочу переписать URL-адрес следующим образом.

http://website.com/documentation/doku.php?id=start

http://website.com/documentation/start

Приведенные ниже правила перезаписи предназначены для использования в качестве стандартных правил по умолчанию, которые работают для dokuwiki, но они ничего не делают.

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

Я попытался добавить обычные правила, с которыми я знаком, но ни одно из них не сработало.

RewriteRule ^documentation/([^/]*)$ /documentation/doku.php?id=$1 [L]
RewriteRule ^([^/]*)$ /doku.php?id=$1 [L]

Когда я ухожу на http://website.com/documentation/start в браузере я получаю ошибку 404.

Запрошенный URL / документация / start не найден на этом сервере.

0
задан 1 December 2015 в 11:54
1 ответ

Сначала проверьте, включен ли .htaccess в конфигурации Apache с помощью AllowOverride all для пути к вашему веб-сайту

https://httpd.apache.org/docs/ 2.4 / ru / howto / htaccess.html

Тогда я думаю, вы ищете это:

https://wiki.apache.org/httpd/RewriteQueryString

RewriteCond %{QUERY_STRING} ^/documentation/doku.php?id=(.*)
RewriteRule .* /documentation/%1/ [L,R=301]
RewriteRule ^/documentation/(.*)/ /documentation/doku.php?id=$1 [L]

Обратите внимание, что % 1 используется вместо $ 1 , чтобы поймать результат regexp RewriteCond

Примерно так /documentation/doku.php?id=start покажет / documentation / start / и будет обслуживать страницу /documentation/doku.php?id=start

В вашем правиле перезаписи вы забываете / в начале вашего регулярного выражения

RewriteRule ^/documentation/(.*)/ /documentation/doku.php?id=$1 [L]
0
ответ дан 5 December 2019 в 11:27

Теги

Похожие вопросы