Dé-*_*-Vu 5 .htaccess mod-rewrite redirect
我似乎遇到了一个我找不到解决方案的问题。
我设置了一个目录和一个同名文件,但似乎找不到将目录重定向到根文件夹中的文件的方法。我找到的所有信息都是用于重写或重定向到子目录中的文件。
目录:example.com/en-gb/
文件: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]
Run Code Online (Sandbox Code Playgroud)
这只会导致以下错误:
您无权访问此服务器上的 /en-gb/.html。
有任何想法吗?这甚至可能吗?
通常,当您请求时/directory,mod_dir 会发出 301 重定向以附加尾部斜杠,即。/directory/(“修复”URL)。然后 mod_dir 就能够从该目录中提供目录索引文档。
不幸的是,这似乎发生在mod_rewrite 能够处理请求之前。因此,您必须在以下位置禁用此行为.htaccess:
DirectorySlash Off
Run Code Online (Sandbox Code Playgroud)
然后,您可以在内部将请求重写到文件中。例如。如果存在则/directory在内部重写为:/directory.html
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.]+)$ $1.html [L]
Run Code Online (Sandbox Code Playgroud)
但是,禁用DirectorySlash它有一个警告 - 您必须确保对目录的任何请求已经有尾部斜杠(或.htaccess也检查这一点)。并注意文档中的安全警告。
参考:
https ://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash