htaccess - 在内部将一个文件夹重定向到另一个文件夹

时间:2012-12-22 02:40:10

标签: .htaccess redirect

我想将一个文件夹的所有无文件和无目录重定向到另一个文件夹。 .htaccess应该在root(http://example.com)。

示例:

http://example.com/admin/core/file.php - Does not exists. So, redirect (internally) to http://example.com/adminhide/core/file.php

http://example.com/admin/index.php - Exists. So, don't do anything..

我尝试创建代码,但我遇到了500内部服务器错误:

Options +FollowSymLinks

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/admin/$
RewriteRule (.*)$ /adminhide/$1 [L]

1 个答案:

答案 0 :(得分:0)

你说:

http://site.com/admin/index.php - Exists. So, don't do anything..

将现有文件放在admin路径中,但同时您的规则拒绝该路径中的所有文件:

RewriteCond %{REQUEST_URI} !^/admin/$`

另一方面,no-files and no-directories实际上是模棱两可的,没有任何可用的东西,但它似乎引用了non-existent个文件。如果是这种情况,将所有404错误映射到http://site.com/adminhide/core/file.php将完成您想要的任务。

尝试使用此代替您问题中的重写规则:

ErrorDocument 404 adminhide/core/file.php

<强>已更新

你想要的是在PHP中做得更好。

由于必须先检测404错误,重定向到全局404脚本,在htaccess中放置如下内容:

ErrorDocument 404  path/Error404.php

在Error404.php中插入如下代码:

 // Check the address with error    
 if ($_SERVER['REQUEST_URI'] == '/admin/core/file.php') {

 // Set the target error script accordingly
 $TargetURL = "http://site.com/adminhide/core/file.php";
 }

 // Another option
 if ($_SERVER['REQUEST_URI'] == '/whatever/file.php') {
 $TargetURL = "http://site.com/whatever/file.php";
 }
 ...  // More options

 // Go to appropriate file
 echo '<script type="text/javascript">window.location ="' . $TargetURL . '";</script>';