我似乎遇到了一个我找不到解决方案的问题。
我有一个目录和一个同名文件设置,我似乎无法找到一种方法将目录重定向到根文件夹中的文件。我找到的所有信息都是重写或重定向到子目录中的文件。
dir:example.com/en-gb /
file:example.com/en-gb(使用htaccess删除扩展名)
目前的htaccess(相关部分):
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^$ /en-gb [L]
RewriteCond %{REQUEST_URI} ^/en-gb/$
RewriteRule . ../en-gb [R,L]
这只会导致以下错误:
您无权访问此服务器上的/en-gb/.html。
有什么想法吗?这甚至可能吗?
答案 0 :(得分:1)
通常,当您请求/directory
时,mod_dir会发出301重定向以附加一个尾部斜杠,即。 /directory/
(“修复”网址)。然后,mod_dir可以从该目录中提供目录索引文档。
不幸的是,在 mod_rewrite能够处理请求之前,这似乎会发生。因此,您必须在.htaccess
中禁用此行为:
DirectorySlash Off
然后,您可以在内部将请求重写到文件中。例如。如果/directory
存在,/directory.html
将被内部重写为RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.]+)$ $1.html [L]
:
DirectorySlash
但是,禁用.htaccess
有一些注意事项 - 您必须确保对目录的任何请求都有尾部斜杠(或者在p.stdin.close()
中检查)。并注意文档中的安全警告。
参考:
https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash