web-dev-qa-db-ja.com

URLにスペースを含むmod_rewrite

スペースが含まれているURLをリダイレクトするようにRewriteRulesを設定する必要があります。私はこれを試しました:

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

...しかし、機能しません。 %20の代わりにスペースを入れると、500内部サーバーエラーが発生します。スペースを追加するにはどうすればよいですか?

36
nickf

エスケープするには、スペースの前に\を付けてみてください。

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

\でスペースをエスケープできます

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

各スペースをエスケープする複雑さを回避したい場合(たとえば、このファイルを自動的に生成することを計画している場合)、単に引用符を使用できます。

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

さらに、これらの引用符を使用して、予想される任意の引数を囲むことができます。

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

最初のオプションはスペースを置き換え、2番目のオプションはURLのハードコードされた%20を置き換えます。

8
Abraham Kifle

ああ、私は解決策を見つけました:正規表現スタイルを使用してスペースを表示します:

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

しかし、これは他のすべての空白文字(タブなど)にも一致すると思われますが、それほど問題になることはないと思います。

1
nickf