Заменить обратные косые черты в URL на прямые косые черты - PullRequest
1 голос
/ 21 октября 2011

у нас есть система, основанная на платформе Moodle, на которую ссылаются файлы следующим образом:

http://[server]/file.php/3/LR4/info/index.html

Теперь это прекрасно работает, однако некоторые из наших учителей по ошибке использовали обратные косые черты, а затем ониорганизовал их части, это означает, что некоторые страницы ссылаются следующим образом:

http://[server]/file.php/3/LR4\info\index.html

Это работало нормально, когда мы использовали Windows Server + IIS.Однако затем мы перешли на Linux + Apache, Apache, похоже, не справляется с ними правильно.Другими словами, он не отображает изображения, размещенные на странице, поскольку их URL-адреса являются относительными, и Apache не может восстановить полный URL-адрес, если базовый URL-адрес содержит обратную косую черту.Таким образом, страница - просто текст, без картинок.

Если я вручную заменю обратные косые черты на прямые в URL в адресной строке браузера, все по-прежнему работает нормально.Однако у нас слишком много таких страниц.Нам нужно что-то переписать URL.Я думал о Apache мод переписать.В основном мне нужны три строки кода:

RewriteEngine on
RewriteCond %{THE_REQUEST} [???]
RewriteRule ??? [R]

Мне нужно регулярное выражение для RewriteCond, которое заставит механизм реагировать только на URL-адреса, содержащие фразу file.php и некоторые обратные косые черты после этого.А для RewriteRule мне нужно что-то, что заменит хотя бы одну обратную косую черту на прямую (оставляя все остальное нетронутой) и сделает после этого редирект.Но я не могу построить правильные выражения - кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Если вы настроены на что-то через .htaccess, то должно работать следующее:

RewriteEngine On
RewriteRule ^(file.php[^\\]*?)\\(.*?)$ $1/$2 [R=302,L]

Другой вариант - отредактировать скрипт file.php и перевести все «\» в «/».в переменных PATH_INFO или REQUEST_URI или, тем не менее, определяет, какой файл отображать.

0 голосов
/ 21 октября 2011

Попробуйте что-то вроде этого:

RewriteEngine on
RewriteMap replace int:replaceall
RewriteRule (.*) "${replace:!$1!\\\\!/}"'

Нашел это решение здесь - сам не проверял. Не уверен, что эти четыре обратные косые черты необходимы (или две подойдут).

...