我们有一个基于Moodle平台的系统,其中文件的引用如下:
的http:// [服务器] /file.php/3/LR4/info/index.html
现在,这很有效,但是我们的一些老师错误地使用反斜杠然后他们组织了他们的部分,这意味着,有些页面被引用如下:
的http:// [服务器] /file.php/3/LR4\info\index.html
我们在使用Windows Server + IIS时工作正常。但是,然后我们切换到Linux + Apache,Apache似乎没有正确处理它们。换句话说,它不显示放置在页面上的图像,因为它们的URL是相对的,如果基本URL包含反斜杠,则Apache无法重建完整的URL。所以页面只是文字,没有图片。
如果我手动替换反斜杠以指向浏览器地址行中的URL,一切仍然正常。但是,我们有太多这样的页面。我们需要一些东西来重写URL。我想到了Apache mod重写。我基本上需要的是代码中的三行:
RewriteEngine on
RewriteCond %{THE_REQUEST} [???]
RewriteRule ??? [R]
我需要的是RewriteCond的正则表达式,它会使引擎仅对包含短语 file.php 的URL做出反应,之后会有一些反向斜杠。而对于RewriteRule,我需要一些东西,用直接替换至少一个反斜杠(保持其他一切不变)并在此之后进行重定向。但我似乎无法构建正确的表达 - 任何人都可以帮忙吗?
答案 0 :(得分:0)
尝试这样的事情:
RewriteEngine on
RewriteMap replace int:replaceall
RewriteRule (.*) "${replace:!$1!\\\\!/}"'
找到此解决方案here - 我自己没有测试过。不确定是否需要这四个反斜杠(或两个反斜杠)。
答案 1 :(得分:0)
如果你准备通过.htaccess做某事,那么以下内容应该有效。
RewriteEngine On
RewriteRule ^(file.php[^\\]*?)\\(.*?)$ $1/$2 [R=302,L]
另一种选择是编辑file.php脚本并将所有'\'翻译成PATH_INFO或REQUEST_URI变量中的'/',或者它确定要显示的文件。