1

私はhtaccessルールを書き直すのは少し新しいですが、ここ数日、ここで何が起こっているのか頭を悩ませてきました。グーグルの量は役に立たなかったようだったので、うまくいけば誰かが答えを知っています。

次のようにアクセスできるサイトがあります。

www.site.com
www.site.com/684
www.site.com/684/some-slug-name-here

これらのシナリオはすべてindex.php、オプションid=684slug=some-slug-name-here

これは問題なく動作します。

私の問題は、別のファイルがあることです。今は呼ばれてadmintagger.phpいますが、なんと言っても失敗します。21g12fjhg2349yf234f.php同じ問題があります。

admintagger.php問題は、私がからアクセスできるようにしたいということですwww.site.com/admintagger

しかし、それは私のインデックスのルールと一致しているようで、代わりに私をそこに連れて行ってくれます。

これが私のコードです:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /


RewriteRule ^imagetagger$ /imagetagger.php [NC,QSA]
RewriteRule ^([0-9]+)/?(.*)?/?$ index.php?id=$1&slug=$2 [NC,L,QSA]
4

1 に答える 1

1

名前(拡張子なし)を介して任意にphpファイルにアクセスできるようにする場合は、その一般的なルールを作成する必要があります。ただし、注意する必要があります。そうしないと、既存のリソース(ディレクトリやスラッグなど)に対する正当な要求を書き換える可能性があります。代わりにこれを試してください:

# make sure we aren't clobbering legit requests:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# see if appending a ".php" to the end of the request will map to an existing file
RewriteCond %{REQUEST_FILENAME}.php -f
# internally rewrite to include the .php
RewriteRule ^(.*)$ /$1.php [L]

次に、その直後にindex.phpへのルーティングを行うことができます。

RewriteRule ^([0-9]+)/?(.*)?/?$ index.php?id=$1&slug=$2 [NC,L,QSA]

3つのケースごとに個別のルールを作成する方がよい場合もありますが、次のようにします。

RewriteRule ^([0-9]+)/([^/]+)/?$ /index.php?id=$1&slug=$2 [NC,L,QSA]
RewriteRule ^([0-9]+)/?$ /index.php?id=$1 [NC,L,QSA]
RewriteRule ^$ /index.php [L]
于 2012-10-19T02:22:55.013 に答える