使Mod_rewrite的RewriteCond相对

时间:2012-07-25 14:07:40

标签: .htaccess mod-rewrite

美好的一天,

我已经做了很多搜索,但无法得到明确的答案。

我有一个目录设置:

/无功/网络/ HTML /α/β/高速缓存/△

我想要一个这样的网址:

http://localhost/alpha/beta/delta

查看缓存/,查看delta目录是否存在,并将用户转发到那里。另一方面,如果delta目录(或包含index.html)不存在,则将用户转发到localhost / alpha / beta / index.php

这是我的htaccess文件,它位于alpha / beta /

RewriteBase /alpha/beta/

# this next line is included because localhost/alpha/beta/ was forwarding to cache/
# there is probably a better way
RewriteCond $1 \w{1}
RewriteCond %{DOCUMENT_ROOT}/alpha/beta/cache/$1 -d
RewriteRule ^(.*)$ cache/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php

这很有效(很多*),但我不想要这个。我想要相对路径,所以使用该软件的人不必修补所包含的.htaccess文件。

我认为RewriteBase会影响RewriteCond,但事实并非如此。如果我删除%{DOCUMENT_ROOT},则条件显然会尝试匹配文件系统/目录上的alpha / beta / cache / delta。使用

RewriteCond cache/$1 -d

也不会针对相对目录进行检查。

我不能在条件中使用{REQUEST_URI},因为我得到/ var / www / html / alpha / beta / delta / cache / delta /

我无法找到隔离当前子目录以供在条件中使用的方法,而不包括请求。

请帮忙。我在绳子尽头。

更新:如果我使用

RewriteCond cache/$1/index.html -F

它可以工作,但重写日志条目非常大。它似乎做了很多冗余检查以完成结果,我不确定它是一个很好的解决方案。

  • 如果我使用alpha / beta / delta /一切都很好。但是如果我放弃最后的正斜杠,地址就会变为alpha / beta / cache / delta /。我想使用该目录,但我不想更改网址。

0 个答案:

没有答案