再会,
我对此进行了很多搜索,但无法得到明确的答案。
我有一个目录设置:
/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。