2

.htaccess を使用して URL を変更しています

www.mysite.com/profile.php?name=name

www.mysite.com/name/name

しかし、ユーザー データを表示する代わりに名前にスペースが含まれていると、404 ページに移動するという問題が発生しました。名前をエンコードしたので、スペースがある場合は %20 に置き換えられますが、それでも機能していません..スペースのない名前は問題なく機能します

ルールを書き直す:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?name=$1
4

2 に答える 2

1

Rewrite ルールを確認してください。「1 つ以上の文字または数字」という正規表現があります。

[a-zA-Z0-9_-]+

空白はそれらの 1 つではありません。似合わないのはそのためです。\s を正規表現に追加します。

[a-zA-Z0-9_-\s]+

于 2012-11-04T23:31:51.520 に答える
1

書き換えの正規表現は、スペースやエンコードされた文字を考慮していません。代わりに、文字、数字、アンダースコア、またはダッシュのみが一致します。

代わりにこれを試してください:

RewriteRule /(.+) /profile.php?name=$1 [L]

あなたの例に基づいて、ルールは次のようになると思います。

RewriteRule /name/(.+) /profile.php?name=$1 [L,QSA]

これは GET パス全体に一致し、それを $1 として書き換えに渡します。追加のクエリ文字列引数を追加する必要がある場合は、QSAフラグを参照してください。

于 2012-11-04T23:32:04.560 に答える