将URL中的反斜杠替换为直接斜杠

时间:2011-10-21 03:16:57

标签: mod-rewrite

我们有一个基于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,我需要一些东西,用直接替换至少一个反斜杠(保持其他一切不变)并在此之后进行重定向。但我似乎无法构建正确的表达 - 任何人都可以帮忙吗?

2 个答案:

答案 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变量中的'/',或者它确定要显示的文件。