2

現在、ユーザーにユーザー名の独自の URL を提供するために、次のコードを用意しています。

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

/about/ただし、このコードが URL を上書きしたため、またはなどの既存のディレクトリは機能し/terms/なくなります。

ファイルまたはディレクトリがまだ存在しない場合にのみ、プロファイルへの URL を指すようにこのコードを調整できますか?

4

1 に答える 1

4

フォルダが実際に存在するかどうかを確認し、存在する場合はリダイレクトしないルールを適用する必要があります。これらの条件が一致しない場合は、リダイレクトを行うルールに進みます。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

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

フラグは-fファイルとして存在することを-d意味し、ディレクトリを意味します。要求されたファイルが実際にファイルまたはディレクトリである場合、リダイレクト ルールに進みません。

また、リダイレクト ルールを次のように短縮できます。

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

?後ろは、/その文字の有無にかかわらず一致することを意味します。正規表現の残りの部分は変更されていないため、このルールは両方のケースに一度に対処します。

于 2014-09-13T15:06:11.850 に答える