2012-03-27 12 views
1

ファイル内の各ルールは、他のものをコメントアウトするとうまくいきますが、それらの2つが一緒に目的を達成するのではなく、むしろサイトを醜いものにします。これを解決する方法に関する提案はありますか?ありがとう。この.htaccessファイルのルールの競合を解決するにはどうすればよいですか?

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
# If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} !-l 
# do not do anything 
RewriteRule^- [L] 

# forward /blog/foo to blog.php/foo 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 

# forward /john to user_page/profile.php?name=john 
RewriteRule ^((?!blog/).+)$ user_page/profile.php?uid=$1 [L,QSA,NC] 

答えて

1

をチェックする必要はありませんRewriteRule ^(.+)$RewriteRule ^((?!blog/).+)$を交換してください。 2回目の書き換えルールが有効ではないURLにリダイレクトするため、このwww.example.com/user_page/profile.php?user=usernameのような意図した有効なURLにwww.example.com/usernameをリダイレクトするので、2回目の書き換え条件を変更しました。

Safarovが提案したように、最後の/ 2番目の書き換えルールも変更されました。以下は完全な.htaccessファイルです。

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
# OR If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
# OR If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} -l 
# do not do anything 
RewriteRule^- [L] 

# forward /blog/foo to blog.php/foo 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 

# forward /john to user_page/profile.php?name=john 
RewriteRule ^(.+)$ user_page/profile.php?uid=$1 [L,QSA] 
+0

+1それはすべてを理解するためです。しかし、私はあなたのコードに小さな修正を加え、あなたの答えを編集する自由を取った。 – anubhava

+0

@anubhava、もう一度感謝します。 – Chibuzo

2

私は最終的にこれを考え出した、再びblog文字列

+0

私はそれが/ profile.php – Chibuzo

+0

htaccessの作業の流れをuser_pageするすべての着信URLがダウンまでですマップするので、この前に、すべてのルールを置くことを試みました。残りはprofile.phpに転送されます – safarov

+0

ねえ!ありがとう、私はそれを考え出した! – Chibuzo

関連する問題