Назад | Перейти на главную страницу

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 / документация / начало не найден на этом сервере.

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

https://httpd.apache.org/docs/2.4/en/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]