web-dev-qa-db-ja.com

URLのすべての%20をアンダースコアに置き換えるルールを書き換えます

現在のURLが欲しい:

http://example.com/files/528/Rabba%20Ho%20-%20Falak%20Shabir%20Song.html

このようにきれいに見えるようにするには:

http://example.com/files/528/Rabba_Ho_-_Falak_Shabir_Song.html

これは私の現在の。htaccessファイルです:

RewriteRule ^category/([^/]*)/([^/]*)\.html$ /index.php?pid=$1&ht=$2 [L]
RewriteRule ^category/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?pid=$1&page=$2&ht=$3 [L]
RewriteRule ^category/([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?sort=$1&pid=$2&page=$3&ht=$4 [L]
RewriteRule ^filedownload/([^/]*)/([^/]*)/([^/]*)\.html$ /fileshow.php?pid=$1&id=$2&ht=$3 [L]

エンコードされたスペースとアンダースコアを書き換えるように変更するにはどうすればよいですか?

3
Marvel

StackOverflowに関する同様の質問を次に示します。 mod_rewrite:アンダースコアをダッシュ​​に置き換えます

回答を修正して、スペース(デコードされた%20)をアンダースコアに置き換えました。 2つ以上の一致がある限り、書き換えルールを再帰的に適用し、1つしか存在しない場合は、別の書き換えルールがリダイレクトを実行します。

RewriteEngine     On
RewriteRule       ^(/?files/.*/[^/]*?)\s([^/]*?\s[^/]*)$ $1_$2 [N]
RewriteRule       ^(/?files/.*/[^/]*?)\s([^/\s]*)$       /$1_$2 [R=301]

他の人がコメントしているように、アプリケーションがURLパスにアンダースコアを期待し、アンダースコアを持つURLを生成していることを確認する必要があります。

2

最初に私の悪い英語についてすみません。 PHPアプリリンクでこれを使用します。

<?php $theURL = "http://example.com/files/528/Rabba Ho - Falak Shabir Song.html"; ?>

<a href="<?= str_replace( " ", "_", $theURL ); ?>" target="_blank">
    Rabba Ho - Falak Shabir Song
</a>

編集:最後のエラーでごめんなさい、今編集しています...

上記のコードは次のようなURLを返します。

http://example.com/files/528/Rabba_Ho_-_Falak_Shabir_Song.html.
1
Studio Cincouno