mod_rewrite с пробелами в URL-адресах
-
03-07-2019 - |
Вопрос
Мне нужно настроить некоторые RewriteRules для перенаправления URL-адреса, в котором есть пробел.Я уже пробовал это:
RewriteRule ^article/with%20spaces.html$ /article/without_spaces.html [R=301,L]
...но это не работает.Ввод пробела вместо %20 приводит к внутренней ошибке сервера 500.Как мне добавить пробел?
Решение
Попробуйте поставить \ перед своим пробелом, чтобы избежать этого.
RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]
Другие советы
Вы можете просто сбежать из этого пространства с помощью \
RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]
Если вы хотите избежать сложности экранирования каждого пробела (напримересли вы планируете автоматически сгенерировать этот файл), вы можете просто использовать кавычки:
RewriteRule "^article/with spaces.html$" /article/without_spaces.html [R=301,L]
Кроме того, эти кавычки могут быть использованы для заключения любого ожидаемого аргумента:
RewriteRule "^article/with spaces.html$" "/article/without_spaces.html" [R=301,L]
RewriteRule ^article/with[\ |%2520]spaces.html$ /article/without_spaces.html [R=301,L]
Первый параметр заменяет пробел, в то время как второй заменяет жестко закодированный %20 в URL.
Ах, я нашел решение:используйте стиль регулярного выражения для отображения пробела:
RewriteRule ^article/with\sspaces.html$ ...
Хотя я подозреваю, что это также соответствовало бы всем остальным пробелам (табуляции и т.д.), Но я не думаю, что это будет большой проблемой.