1

.htaccess ルールを使用して、ほとんどすべての URL を古い形式から細かい URL に書き直すことに成功しました。しかし、いくつかのアドレス形式に問題があります

たとえば、example.com/myusername は正常に動作しますが、example.com/my.username は 404 ページが見つからないことをスローします。

注: my.username は、データベースで有効なユーザー名です。この問題を解決するにはどうすればよいですか

更新: これは .htaccess ファイルの完全なコードです

# -FrontPage-

IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

#ErrorDocument 404 example.com

RewriteEngine on

RewriteRule ^(.*)\.htm$ $1.php [nc]

RewriteRule ^([a-zA-z0-9_-]+)$ community/profile.php?_username=$1
4

2 に答える 2

2

問題は、この行の正規表現にドット (.) を含めなかったことです (my.username にドットが含まれているため)。

RewriteRule ^([a-zA-z0-9_-]+)$ community/profile.php?_username=$1

これを次のように変更します。

RewriteRule ^([a-zA-z0-9_.-]+)$ community/profile.php?_username=$1

ユーザー名に含まれる可能性のあるすべての文字を正規表現に追加する必要があることに注意してください (現在のところ、英数字、アンダースコア、ダッシュ、およびドットがサポートされています)。

于 2012-08-05T14:36:08.107 に答える
0
  1. 最初のルールが一致する場合、両方のルールを適用する必要はありません。L フラグを追加します。これがないと、「abc/def.htm」は「community/profile.php?_username=abc/def.php」になります。
  2. 2 番目のルールがありません。許容キャラとして
  3. (おそらく) 両方のルールのパラメーターを保持する必要があります。QSA フラグを追加します。

その結果

RewriteRule ^(.*)\.htm$ $1.php [nc,L,QSA]

RewriteRule ^([a-zA-z0-9_.-]+)$ community/profile.php?_username=$1 [L,QSA]
于 2012-08-05T15:12:16.807 に答える