0

.htaccesファイルでこれらを書き直したい:

/*.php -> /*(/)

(例:gallery.phpから/galleryまたは/gallery /)

/snippets.php*?s= -> /snippets/*

(例:snippets.php *?s = test to / snippets/testまたは/snippets/ test /)

これまでの私のコード:

RewriteEngine on  
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^snippets/([^/\.]+)/?$ snippets.php?s=$1 [L]

私のコードを使用して表示されるバグ:

/snippets/および/snippets/ test(/)は、500エラーを警告します。/snippetsは正常に機能します。

私は何が間違っているのですか?

4

2 に答える 2

2

Michealが言ったように、順序を変更する必要がありますが、MichaelはRewriteCondを移動しなかったため、予期しない動作が発生しました。

RewriteEngine on  
RewriteBase /

RewriteRule ^snippets/([^/.]+)/?$ snippets.php?s=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

念のため、テストサーバーでこのコードを確認しました。

于 2012-07-07T21:21:48.423 に答える
0

あなたはほとんどこれが正しいです。に対して特定のアクションを実行する/snippetsには、キャッチオールルールの前に実行する必要があります。それ以外の場合、最初のルールは一致し、snippets/test.php存在しないルートになります。

RewriteEngine on  
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Match snippets first...
RewriteRule ^snippets/([^/.]+)/?$ snippets.php?s=$1 [L]

# Then the catch-all for remaining matches
RewriteRule ^(.*)$ $1.php [L]
于 2012-07-07T21:00:38.870 に答える