0

私のブログの .htaccess は、1 つのページが複数の URL からアクセスされるように設定されており、アクセスした URL によって異なるコンテンツが表示されます。

http://kn3rdmeister.com/category/blog/
http://kn3rdmeister.com/2012/
http://kn3rdmeister.com/2012/07/

全て実際に使用してhttp://kn3rdmeister.com/blog.phpいます。

.htaccess ファイルは、異なるクエリ文字列を使用するだけで 1 つのページ (ほとんどの場合)にリダイレクトするだけでよいという意味で非常に便利です。それらをいじくり回した後、私のすべてのルールが最終的に機能するようになりました。まあ、それらのほとんどすべてが機能します。最後のものはそうではありません。

.htaccess:

RewriteEngine On

RewriteRule ^blog\.php$ /category/blog/ [R=301,L]
RewriteRule ^category/blog/?$ blog.php [L]

RewriteRule ^category/blog/page/?$ /category/blog/ [R=301,L]
RewriteRule ^category/blog/page/([0-9]*)/?$ /category/blog/?pagenum=$1 [L]

RewriteRule ^([0-9]{4})/?$ /category/blog/?year=$1 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2 [L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2&day=$3 [L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$ /category/blog/?url=http://kn3rdmeister.com/$1/$2/$3/$4/ [L]

最後のルールは、各ブログ投稿の「パーマネント リンク」ページにリダイレクトすることになっています。各 URL は一意であるため、投稿 URL を一意の識別子として使用しています。基本的に、"blog.php" を介して "url" クエリ文字列を渡すことになっています。PHP スクリプトが引き継ぎ、「url」クエリ文字列が設定されていることを確認し、その行に正確な URL を持つ唯一の投稿を読み込みます。

スクリプトは機能しますが、リダイレクトは機能しません。に直接行く

http://kn3rdmeister.com/blog.php?url=http://kn3rdmeister.com/2012/07/04/amsterdam-ave/

適切なコンテンツをロードします。ただし、

http://kn3rdmeister.com/2012/07/04/amsterdam-ave/

しません。

4

2 に答える 2

0

QSA (Query String Append)を追加してみてください。また、ルールを反転して、「より深い」リンクが一番上に来るようにします。

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$ /category/blog/?url=http://kn3rdmeister.com/$1/$2/$3/$4/ [QSA,L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2&day=$3 [QSA,L] 
RewriteRule ^([0-9]{4})/([0-9]{2})/?$ /category/blog/?year=$1&month=$2 [QSA,L] 
RewriteRule ^([0-9]{4})/?$ /category/blog/?year=$1 [QSA,L]

ただし、書き換えられたリンクを他のルールで使用することはできません。したがって、どこにでもcategory/blog/置き換えてくださいblog.php

于 2012-07-16T06:38:40.547 に答える
0

webarto のコメントは良いアドバイスですが、あなたの問題には [:

^([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)/?$

いいえ

^([0-9]{4})/([0-9]{2})/([0-9]{2})/(^/]+)/?$
于 2012-07-16T07:36:15.457 に答える