Apache 服务器上的目录重定向

Apache 服务器上的目录重定向

我下载了一个名为 sphpblog 的简单 PHP 博客模板,并将其放在我的服务器上。该博客可通过 classlibrary.org 访问。此域重定向到服务器上的文件夹 /other/william/classlibrary。我可以访问博客的主页,并且显示正常。但是,当我尝试单击链接时,链接转到 classlibrary.org/other/william/classlibrary/linkname.extension,这会导致 404 错误。我检查了博客的首选项,没有选项可以将其直接转到网站的根目录。因此,我希望将任何指向 classlibrary.org/other/william/classlibrary/filename.extension 的链接重定向到 classlibrary.extension。

我可以通过 .htaccess 文件来做到这一点,而不是为服务器上的每个文件创建单独的 html 文件(这会花费一些时间)。我的服务器运行的是 PHP 版本 5.2,classlibrary.org 重定向到的完整路径是 /home/content/r/t/e/rteder10/other/william/classlibrary。我无法访问管理员控制面板或访问服务器本身。它是 Godaddy Linux Hosting。任何帮助都将不胜感激。

答案1

假设服务器配置为允许覆盖,则可以使用 mod_rewrite 创建各种映射。恐怕您的具体情况有些复杂。我不清楚您将这些列表保存在哪里,以及是否有任何一致的规则来构建它们。如果有系统,您可以像这样使用 mod_rewrite:

RewriteEngine on
RewriteRule ^/other/william/classlibrary/([a-z]*).ext  /other/william/classlibrary/$1library.ext

但是,只有当链接名与类名以某种方式匹配时,这才有效。您可以在以下位置找到有关 mod_rewrite 的更多信息:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

如果关系过于复杂或任意,以致于正则表达式和反向引用毫无用处,那么您可以使用重写映射,它允许您创建任意重写的表。http://httpd.apache.org/docs/2.3/rewrite/rewritemap.html

如果这一切看起来太复杂并且您没有太多的重定向,那么您可以使用更简单的重定向命令在 .htaccess 文件中逐个执行:

Redirect  /other/william/classlibrary/filename.extension http://classlibrary.org/other/william/classlibrary/classlibrary.extension

答案2

您还可以创建简单的 404 错误处理程序,它将分析请求 URL,如果 URL 是您需要的,则创建具有所需名称的页面副本。因此,网站将在第一次请求时自动更新,然后不需要重定向,因为新的(正确命名的)文件将到位。

在 404 错误处理程序脚本中,当您创建一个新文件时,您将回复(给用户)http 代码 200 和页面内容,因此即使是第一次访问,访问者也不会看到错误。

相关内容