以下のコードを.htaccessファイルに記述しました。
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?p=$1&id=$2 [NC,QSA,L]
RewriteRule ^([^/\.]+)/?$ index.php?p=$1 [NC,QSA,L]
管理者ディレクトリ内に自分のWebサイトの管理者用のコントロールパネルも作成しました。問題は、このアドレスからコントロールパネルにアクセスしようとするとwww.site.com/admin
、本当に必要なものが表示されないことです。その後、URLはに変わりますwww.site.com/admin/?p=admin
。
何が問題ですか ?
条件は、次のルールにのみ適用されます。
2番目のルールは、既存のディレクトリまたはファイルであっても評価されます。
2つのルールが両方の条件を尊重する必要がある場合、2つの可能性があります。
条件を複製します。
RewriteEngine On
Options +FollowSymLinks
# this rule is evaluated if not a directory AND not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?p=$1&id=$2 [NC,QSA,L]
# this rule is evaluated if not a directory AND not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?p=$1 [NC,QSA,L]
またはif/else
、ディレクトリ/ファイルの場合は何もせずに状態をシミュレートします
RewriteEngine On
Options +FollowSymLinks
# if file or directory, leave (do nothing)
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
# if we reach here, means it's not a file or directory. So rules can be evaluated
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?p=$1&id=$2 [NC,QSA,L]
RewriteRule ^([^/\.]+)/?$ index.php?p=$1 [NC,QSA,L]
また、これはそれほど重要ではありませんが、あなたはエスケープする必要はありません.
、角括弧の中にとき:([^/\.]+)
することができ([^/.]+)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加