mod_rewrite 不适用于 apache 别名

mod_rewrite 不适用于 apache 别名

我创建了一个文档 wiki,我想使用虚拟主机的别名将其附加到我的主要站点。这样我就可以通过 website.com/documentation 访问该 wiki。我以前曾成功使用 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 /documentation/start。

答案1

首先,检查你的 Apache 配置中是否AllowOverride all为网站路径启用了 .htaccess

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来捕获 RewriteCond 正则表达式的结果

就像这样/documentation/doku.php?id=start将显示/documentation/start/并提供页面/documentation/doku.php?id=start

在您的重写规则中,您忘记了/正则表达式开头的

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

相关内容