Подтвердить что ты не робот

Mod_rewrite с пробелами в URL-адресах

Мне нужно настроить RewriteRules для перенаправления URL-адреса, в котором есть пробел. Я пробовал это:

RewriteRule ^article/with%20spaces.html$ /article/without_spaces.html [R=301,L]

... но это не работает. Ввод в пространство вместо %20 вызывает 500 Internal Server Error. Как добавить пробел?

4b9b3361

Ответ 1

Попробуйте помещать\перед вашим пространством, чтобы избежать его.

RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]

Ответ 2

Вы можете просто покинуть пространство с помощью \

RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]

Ответ 3

RewriteRule ^article/with[\ |%2520]spaces.html$ /article/without_spaces.html [R=301,L]

Первый вариант заменяет пробел, а второй заменяет жестко закодированный %20 в URL-адресе.

Ответ 4

Если вы хотите избежать сложности экранирования каждого пространства (например, если вы планируете автоматически создавать этот файл), вы можете просто использовать кавычки:

RewriteRule "^article/with spaces.html$" /article/without_spaces.html [R=301,L]

Кроме того, эти кавычки могут использоваться для помещения любого ожидаемого аргумента:

RewriteRule "^article/with spaces.html$" "/article/without_spaces.html" [R=301,L]

Ответ 5

А, я нашел решение: используйте стиль regex для отображения пробела:

RewriteRule ^article/with\sspaces.html$ ...

Хотя, я подозреваю, что это будет соответствовать всем другим символам пробелов (вкладки и т.д.), но я не думаю, что это будет большой проблемой.