首先,我有以下目录结构:
我想要做的是:
当用户请求http://domain.xts/.../rewriting_experimentation_directory/falsename
时,
应显示realfile.txt。我已经实现了,使用.htaccess文件中的以下表达式:
RewriteEngine On
RewriteRule ^falsename$ realfile.txt
但是,当用户请求此网址http://domain.xts/.../rewriting_experimentation_directory/realfile.txt
时,我也在努力实现这一目标,
他被重定向到http://domain.xts/.../rewriting_experimentation_directory/falsename
,然后自然地显示了realfile.txt的内容。
但我遇到了两个问题:
rewriting_experimentation_directory
之前的路径与localhost上的路径不同有没有办法实现这个目标?
另外,作为问题的答案,'为什么你需要那个?' - 学习,一次,其次,以备将来参考(可能仍然算作学习)。我希望这不会使我的问题无效。
答案 0 :(得分:3)
尝试在RewriteRule之前添加:
RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ (.*)/realfile.txt\ HTTP
RewriteRule ^realfile.txt$ %2/falsename [R=301,L]
如果您只是使用RewriteRule(括号中的 R )重定向,这会有一些问题,它会导致重写循环并且您会收到错误。您需要检查实际请求是否为“realfile.txt”。正则表达式(.*)/realfile.txt
尝试提取相对URI,它将是.htaccess文件所在的位置(否则这些条件/规则根本不会被执行),因为我们不知道它是什么是的,我们可以使用RewriteRule中的%2 来反向引用它。
因此,如果您将.htaccess文件放在/test/
并请求http://yourdomain/test/realfile.txt,您将被重定向到http://yourdomain/test/falsename,您的重写规则将提供realfile.txt。如果您将.htaccess文件放在/deploy/
并请求http://yourdomain/deploy/realfile.txt,则会将您重定向到http://yourdomain/deploy/falsename等。