2

再会,

我对此进行了很多搜索,但无法得到明确的答案。

我有一个目录设置:

/var/www/html/alpha/beta/cache/delta

我想要这样的网址:

http://localhost/alpha/beta/delta

查看 cache/,查看 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/。我想使用该目录,但我不想更改 url。
4

0 回答 0