htaccess重写到变量目录(cms目录)中的index.php

时间:2014-05-05 09:54:16

标签: regex apache .htaccess mod-rewrite redirect

我遇到以下问题: 我想构建一个在每个目录中都能运行的脚本,无论是根目录还是子目录。所以最重要的是,我有一个.htaccess文件,将所有请求重定向到安装脚本的目录中的index.php 。重定向很简单,有很多教程。但问题是我不知道脚本的安装路径。我不知道它是子目录还是根目录。我看到的唯一解决方案是创建一个install.php,它将使用正确的路径修改htaccess。但是有更好的解决方案吗?

谢谢!

更新: 由于我的问题显然存在误解,我将举一个例子。假设我的项目只包含一个index.php和一个.htaccess文件。 .htaccess文件应将所有请求重定向到index.php。这很简单,但是 .htaccess文件不知道它将在哪个目录中调用,所以可能是用户在/ xyz /中安装了项目,但也在根目录/中。如果我请求xyz / abc / 123 / echo / world / .htaccess-file不知道index.php在哪个目录中用于重定向,它只知道它应该重定向到root的index.php的脚本。所以我的解决方案是创建一个install.php并使用正确的路径更改.htaccess文件,但是没有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

将此规则放在根目录中.htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?/)?[^/]+$ /$1/index.php [L]

这会将每个不是有效文件/目录的请求重写到该子目录的index.php

编辑:如果您想将其放在/anydir/中,请使用:

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . %{ENV:BASE}index.php [L]