2017-09-27 16 views
3

.htaccessに問題があります。私のウェブサイトにhttp://example.com/newestを設定したいとの簡単な説明があります。ただし、常にhttp://example.com/postnameにリダイレクトされます。正確な「最新の」ページが必要な場所ここに私のコードは次のとおりです。このHtaccess書き換えルールの支援が必要

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteBase/
RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301] 
RewriteRule ^/category/(.*)$ page.php?f=$1 
RewriteRule ^/search/(.*)$ search.php?f=$1 
RewriteRule ^(.*)/$ post.php?f=$1 <- If this is removed, my post htaccess will not work 
RewriteRule ^newest/$ index.php?f=newest <- I want to execute this code 

私は本当にこれが呼び出されたかわからない、私は、全体のStackOverflowを探してきたが、私はどんな答えが得られませんでした。これが重複した質問であれば私のままにしておいてください。

+0

あなたはポストラインの上にそれを置くことを試みるでした

は、代わりに次のようなものを試してみてください?この行RewriteRule^newest/$ index.php?f = newest –

+0

私は前にしたが、うまくいかなかった。この行に戻る前に、RewriteRule ^(。*)/ $ post.php?私は^(。*)がすべてのパラメータを無制限にキャッチすると思います。だから私はそれを制限するアルゴリズムでなければならないと思うが、何を使うべきか分からない。 –

+0

検索とカテゴリは正常に行われますか? –

答えて

0

Mohammedさんがコメントに示唆しているように、あなたの指示は間違っています。あなたの "最新の"書き換えの上にある行はキャッチオールであり、すべてのリクエストを書き換えます。したがって、最後の行は決して一致しません。あなたのルールは、あなたのURLが最後のスラッシュで終わる必要があることを意味するものではあり

http://example.com/newest 

注意。したがって、http://example.com/newestではなく、http://example.com/newest/(末尾にスラッシュが付いています)にリンクする必要があります。そうしないと、不要なリダイレクトが多く発生します。

しかし、RewriteCondという指示文は、それに続くすべての指示文に当てはまると信じているようです。これはそうではありません。最初のRewriteCond指令にのみ適用されます。さらに処理しないようにするには、さらにLフラグが必要です。

はまたパターンを書き換える「検索」「カテゴリ」とのスラッシュの接頭辞を持っているので、これらは.htaccessコンテキストに一致することはありませんでしょう。

RewriteEngine On 
RewriteBase/

# Don't process the request further if it maps to an existing file 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

# Append trailing if omitted 
# Although strictly speaking this only redirects if there are no slashes at all in the URL 
RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301] 

RewriteRule ^category/(.*)$ page.php?f=$1 [L] 
RewriteRule ^search/(.*)$ search.php?f=$1 [L] 
RewriteRule ^newest/$ index.php?f=newest [L] 
RewriteRule ^(.*)/$ post.php?f=$1 [L] 
+0

それは何のために説明してくれますか? RewriteRule^- [L] –

+0

'RewriteRule'(それに先行する' RewriteCond'ディレクティブと一緒に)は、リクエストがファイルにマップされている場合、後続のmod_rewriteディレクティブのそれ以上の処理を防ぎます。 '^' _pattern_はすべてのURLにマッチし、 '--'(単一のハイフン)_置換はURLを変更しません。これはあなたのディレクティブの反対であることに注意してください(_CondPattern_の '!'接頭辞がないことに注意してください)。これはファイルにマップされない場合にのみ以下のディレクティブを実行します。 – MrWhite

+1

ああ、そうです。とにかく答えてくれてありがとう。本当に助けになる。私は再び新しい知識を得る:) –

関連する問題