.htaccessファイルに書き換えルールを実装して、特定のURLをサーバーのディレクトリとして表示したい。私が書いた以下のコードを参照してください、
RewriteRule ^(.*)/$ ?page=$1 [NC]
これにより、www.mysite.com/abc/
などのURLがwww.mysite.com/index.php?page=abc
に書き換えられます。
しかし、www.mysite.com/abc
をリクエストすると、404エラーがスローされます。www.mysite.com/abc
とwww.mysite.com/abc/
の両方に一致する書き換えルールを作成するにはどうすればよいですか?
編集:
現在の.htaccessファイル( Litso's answer の rd revision の後)は次のようになります。
##
ErrorDocument 401 /index.php?error=401
ErrorDocument 400 /index.php?error=400
ErrorDocument 403 /index.php?error=403
ErrorDocument 500 /index.php?error=500
ErrorDocument 404 /index.php?error=404
DirectoryIndex index.htm index.html index.php
RewriteEngine on
RewriteBase /
Options +FollowSymlinks
RewriteRule ^(.+)\.html?$ $1.php
RewriteCond !-d
RewriteRule ^(.*)/$ ?page=$1 [NC,L]
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ ?page=$1 [NC,L]
##
更新
RewriteCond !-d
RewriteRule ^(.*)/$ ?page=$1 [NC,L]
RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ ?page=$1 [NC,L]
これは最初にURLをスラッシュで書き換えますが、既存のディレクトリではない場合のみです。
見つからない場合は、スラッシュなしでURLを書き換えます(ただし、index.phpでない場合にのみ、既に書き換えられたURLは無視されます)。
次の条件とルールがあなたのためのトリックを行う必要があります。 RewriteCond ディレクティブを論理AND(デフォルト)または論理OR([OR]
を追加すること)でチェーンできます。
# Check that there's no directory with that name
RewriteCond !-d
# Check that there's no regular file with that name
RewriteCond !-f
# Prevent loop if index.php is requested
RewriteCond %{REQUEST_URI} !index.php
# Finally rewrite the request; trailing slash optional
RewriteRule ^(.*)/?$ index.php?page=$1 [NC,L]