如何将目录下所有路径的控制权传递给另一个 .htaccess 文件?
How do I pass control to another .htaccess file for all paths beneath a directory?
我的站点 ww.example.com 在其根目录中运行 WordPress,这意味着任何路径都将重定向到要评估的 WordPress 安装。我还在 www.example.com/path/to/wiki/ 下安装了 DokuWiki,它同样使用 .htaccess 在 www.example.com/path/to/wiki/wikipage.[=12 等路径下传送 wiki 页面=]
服务器上的文件结构将所有非 WordPress 内容存储在名为 content 的子目录中,因此 Dokuwiki 安装实际上位于 content/path/to/wiki/.
不幸的是,虽然 www.example.com/path/to/wiki/ 显示正确,但 www.example.com/path/to/wiki/wikipage 显然被传递回顶级 WordPress .htaccess 和 returns 404 错误。
我的 .htaccess 文件中需要什么才能使此设置生效?
示例 .htaccess 文件
顶级 WordPress .htaccess
# Rewrite to content directory
RewriteCond %{DOCUMENT_ROOT}/content/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.html -f
RewriteRule ^(.*)$ /content/ [L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
DokuWiki.htaccess
RewriteEngine on
RewriteBase /path/to/wiki
RewriteRule ^_media/(.*) lib/exe/fetch.php?media= [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media= [QSA,L]
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_&id= [QSA,L]
RewriteRule ^$ doku.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku.php?id= [QSA,L]
我认为您需要做的就是从根目录中的 .htaccess 文件中省略 wiki 和内容目录的路径,并将该路径包含在第一个重写规则中。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/content/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.html -f
RewriteRule ^(path/to/wiki/.+/?)$ /content/ [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(path/to/wiki|content)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我的站点 ww.example.com 在其根目录中运行 WordPress,这意味着任何路径都将重定向到要评估的 WordPress 安装。我还在 www.example.com/path/to/wiki/ 下安装了 DokuWiki,它同样使用 .htaccess 在 www.example.com/path/to/wiki/wikipage.[=12 等路径下传送 wiki 页面=]
服务器上的文件结构将所有非 WordPress 内容存储在名为 content 的子目录中,因此 Dokuwiki 安装实际上位于 content/path/to/wiki/.
不幸的是,虽然 www.example.com/path/to/wiki/ 显示正确,但 www.example.com/path/to/wiki/wikipage 显然被传递回顶级 WordPress .htaccess 和 returns 404 错误。
我的 .htaccess 文件中需要什么才能使此设置生效?
示例 .htaccess 文件
顶级 WordPress .htaccess
# Rewrite to content directory
RewriteCond %{DOCUMENT_ROOT}/content/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.html -f
RewriteRule ^(.*)$ /content/ [L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
DokuWiki.htaccess
RewriteEngine on
RewriteBase /path/to/wiki
RewriteRule ^_media/(.*) lib/exe/fetch.php?media= [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media= [QSA,L]
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_&id= [QSA,L]
RewriteRule ^$ doku.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku.php?id= [QSA,L]
我认为您需要做的就是从根目录中的 .htaccess 文件中省略 wiki 和内容目录的路径,并将该路径包含在第一个重写规则中。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/content/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/content/index.html -f
RewriteRule ^(path/to/wiki/.+/?)$ /content/ [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(path/to/wiki|content)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress