0

私の学校には、親と教師のための小さなソーシャル ネットワークのようなものがあります。私は自分の.htaccessファイルを使用して、教師のプロファイルへのリンクをより明確にし、すべての URL に末尾のスラッシュを追加しています。リンクに移動すると(時々)、 Below is my file/teachers/teacher-name/にリダイレクトされると、この問題が発生します。Chrome でブラウザのキャッシュをクリアすると、一時的に修正されることがあります。私は構文を正確に書くことはできませんが、かなり精通しています。どんな提案でも大歓迎です!/teachers/teacher-name.php.php.php.php.php.php.php.php....htaccess.htaccess

RewriteEngine on
RewriteBase /

#remove php ext
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php

#force trailing slash/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)([^/])$    /$1$2/ [L,R=301]

#other rewrites
RewriteRule ^teachers/([^/\.]+)/$ /teachers/profile.php?u=$1
RewriteRule ^teachers/([^/\.]+)/posts/$ /teachers/posts.php?u=$1
RewriteRule ^teachers/([^/\.]+)/posts/([^/\.]+)/$ /teachers/post.php?u=$1&p=$2

RewriteRule ^gallery/([^/\.]+)/$ /gallery/album.php?n=$1
RewriteRule ^gallery/([^/\.]+)/slideshow/$ /gallery/slideshow.php?n=$1
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/([^/\.]+)/$ /gallery/photo.php?a=$1&p=$2&e=$3

編集:私が話していることの正確なスクリーンショットを添付しました。 ここに画像の説明を入力

4

3 に答える 3

1

これは、末尾のスラッシュを追加するというあなたの決定によるものです。

#force trailing slash/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)([^/])$    /$1$2/ [L,R=301]

これの代わりに、次のように書くこともできます:

#force trailing slash/
RewriteCond %{REQUEST_FILENAME} !-f
#the following rule only works for .php obviously, so add other rules
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)([^/])$    /$1$2/ [L,R=301]

また、301 リダイレクトを使用したため、ブラウザーはリダイレクトをキャッシュする可能性が最も高いため、機能する前にブラウザーのキャッシュをクリアする必要がある場合があります。

于 2012-06-27T03:33:39.437 に答える
0

これをもう一度見ると、別のエラーが表示されます。条件を共有しようとする 2 つのルールがあるようです。これは動作しません。各ルールには独自の条件が必要です

#remove php ext
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php #this rule will always run

に変更する必要があります

#remove php ext
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/([^/]+)/$ $1/$2.php #this rule will always run

.phpそれ以上に、で終わる URLに追加しようとしています/か?

RewriteRule ^([^/]+)/$ $1.php
于 2012-06-27T19:18:50.327 に答える
0

[L].php ルールの末尾にa を追加して、mod_rewrite が確実に処理を停止するようにします。

多くの場合、そのようなルールの一致が見つかった場合、そのルールだけをリクエストで実行する必要があります。最後の 6 つのルールもこの例ですが、互いに重複しないため、ルールなしで実行できます。

于 2012-06-27T02:31:20.243 に答える