0

我使用 Dokuwiki 作为我的网站。我有一个关于 htaccess 重写规则的快速问题。我有以下配置。这些建议来自Dokuwiki 帮助

Options -Indexes -MultiViews +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTPS} !=on
RewriteRule ^lib/exe/xmlrpc.php$      https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

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

RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] 

我承认我不明白发生了什么。重要的是我想要

http://mydomain.com

改为

http://www.mydomain.com

以及任何子域。另外,我想摆脱丑陋的 Dokuwiki 语法,它附加了诸如 doku.php 之类的东西?到链接的末尾。

目前,使用这个 .htaccess 文件的转换是:

[Good] www.mydomain.com --> www.mydomain.com
[Good] www.mydomain.com/mypage --> www.mydomain.com/mypage

[Bad] mydomain.com --> www.mydomain.com/doku.php
[Bad] mydomain.com/mypage --> www.mydomain.com/doku.php?id=mypage 

所以你看,如果我在事物前面附加 www 似乎可以正常工作,但是当我不这样做时,重写规则会附加正确的 www,但是现在丑陋的 wiki 语法也伴随着站点名称(doku. php 和 id= 部分)。

我在 htaccess 配置中哪里出错了?

4

1 回答 1

0

TSGM,这看起来不错,除了你将 mydomain.com 重写为 www.mydomain.com 作为最后两行。将最后两条线向上移动,以便它们紧随其后RewriteEngine on,这应该可以解决它。

原因是(有时)触发了重定向以创建“干净的 url”,而当这种情况发生时,对 www 的重写永远不会被执行。

通过将两条线向上移动,您将强制 www 重写在 doku 重写开始之前首先发生。

于 2013-08-13T15:18:57.590 回答