在 Apache 重写中隐藏原始文件夹



我在创建重写规则时遇到问题。

我们有一个Wordpress安装,我们需要服务器静态和动态内容的混合。

假设我们在/support 的 wordpress 中有一个页面,它是论坛、文档等的登录页面。

我们的文档是在wordpress之外生成的,我们希望它从/support/documentation中提供。

我们该如何看待这个问题?我尝试了几个选项,最接近的是将文档添加到单独的文件夹中:

RewriteRule ^support/documentation(/.*)?$ /support-4-0/Documentation$1 [NC,L]

这里的问题是support-4-0文件夹仍然由Apache提供,导致内容重复的问题。有没有更好的方法呢?

如果在将support-4-0文件夹存储在站点的DocumentRoot文件夹以外的位置没有问题,则可以使用Alias功能。

来自 Apache 文档:

别名指令用于在 URL 和文件系统路径之间进行映射。这允许不直接在 DocumentRoot 下作为 Web 文档树的一部分的内容。

<VirtualHost *:80>
DocumentRoot /var/www/domain.com/public_html
# ...
Alias /support/documentation /var/www/domain.com/support-4-0
<Directory /var/www/domain.com/documentation>
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
allow from all
</Directory>
# ...
</VirtualHost>

别名语法:

Alias "Map-This-URI" "To-This-System-Path"

您需要指定涵盖别名目标的其他部分。这是示例目录配置:

<Directory "Specified-System-Path">
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
allow from all
</Directory>

PS:上述配置的参考目录树:

/
└─ var
  └─ www
     └─ domain.com
├─ public_html
└─ support-4-0

如果要阻止用户访问support-4-0可以将用户从该页面重定向到从support开始的新支持页面。

您可以在下面使用,

RewriteRule ^support-4-0/(.*) http://websitename/support/$1 [R]

确保安装了 apache mod_rewrite 模块。然后,在您的 apache 配置、虚拟主机配置或(不太理想的(.htaccess 文件中使用类似的东西:

RewriteEngine On
RewriteRule ^/(.*)$   /pages/$1

相关内容

最新更新