1

書いているスクリプトに問題があります。

私はそのような種類のURLを持っています:

forum.php?f=topic&g=$1&id=$2&alias=$3
forum.php?f=group&g=$1
forum.php

私はそれらを持っているために書き直す必要があります:

/forum/group/id-alias_topic > forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]
/forum/group > forum.php?f=group&g=[GROUP]
/forum > forum.php

私は試してみました:

RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+) forum.php?f=topic&g=$1&id=$2&alias=$3
RewriteRule ^forum/([\w'-]+) forum.php?f=group&g=$1
RewriteRule ^forum/ forum.php

しかし、それは機能しません。forum.phpのみが表示されます。
で始まるすべてのURLに/forumは、によって提供されるデフォルトのページが表示されます。/forum.php

たとえば、forum.php「メインページ」というテキストが表示されます。

forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]「GROUP+ID+ALIAS_TOPIC」と表示されるはずです

しかし、私が訪問/forum/android/1-first_topicすると、「メインページ」が表示されます

^forumたとえば、と置き換えると^foru機能します。ブラウザのキャッシュをクリーンアップしてapacheを再起動しましたが、それでも機能しません。他のブラウザでも問題は同じです。私の/var/ wwwには、これらのファイルとディレクトリがあります。

administrator.php  assets  cache  forum_functions.php  forum.php  functions.php  global.php  index.php  media  notfound.php  OLD  pwdgen.php  robots.txt  rss.php  simple_html_dom.php  store.php  template  v.php

アドバイスはありますか?

Rewrite.log: http: //pastebin.com/MeapYeBA

4

3 に答える 3

1

[L](最後の)フラグを使用しておらず、式の最後を$それぞれに固定していないため、最初の2つを通過した後、最後のルールに一致します。

たとえば、このURLは最初と最後のルールの両方に一致します。example.com/forum/group/123-thing最後のルールが一致forum/し、。で終了していない場合はそれに続くすべて$のルールが一致するためです。

[L]フォールスルーを防ぐためにフラグを追加し、で正規表現を終了します$

# Don't apply these if the file actually exists (like forum.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# This one doesn't really need to terminate in $
RewriteRule ^forum/([^/]+)/([0-9]+)-(.+) forum.php?f=topic&g=$1&id=$2&alias=$3 [L]
# This one must terminate with $
RewriteRule ^forum/([^/]+)$ forum.php?f=group&g=$1 [L]
# As must this one..
RewriteRule ^forum/?$ forum.php [L]

また、次のすべてに一致するように[\w'-]+、より単純なものに置き換えました。最後のルールでは、オプションの末尾を許可するように追加しました。、でも同様に機能しますが、の間のすべてを一致させることを意図しているため、より一般的なパターンです。[^/]+//?/[\w'-]+/[^/]+

上記の各ルールは、http://htaccess.madewithlove.be/でテストされ、機能しています。

于 2013-02-15T20:22:06.647 に答える
0

RewriteRuleの最後にtihs [S]を付けて、他のルールを停止するためにスキップフラグを設定する必要が あります。

 RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+)$ forum.php?f=topic&g=$1&id=$2&alias=$3 [S=2]
 RewriteRule ^forum/([\w'-]+)$ forum.php?f=group&g=$1 [S=1]
 RewriteRule ^forum/$ forum.php
于 2013-02-15T20:22:35.420 に答える
0

@Michael Berkowskiのおかげで解決策を見つけました

sudo nano /etc/apache2/sites-enabled/000-default 

MultiViews をすべて削除してから、Apache を再起動します。

于 2013-02-15T21:40:13.910 に答える