1

I've been struggling with my .htaccess file for weeks now, I changed it many times but it just won't work.

I have this in my .htaccess file:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/([^./]+)\.html$ category.php?id=$1 
RewriteRule ^/([^./]+)\.html$ tag.php?id=$1 
RewriteRule ^/([^./]+)\.html$ play.php?id=$1 

but it does not work.

4

2 に答える 2

0
  1. 条件は最初のルールにのみ適用されます。の各セットは、直後RewriteCondのにのみ適用されます。したがって、条件はにのみ適用され、最後の 2 つのルールには条件がまったくありません。RewriteRuleRewriteRule ^/([^./]+)\.html$ category.php?id=$1

  2. あなたの条件は、存在するものを別のものに書き換えることです。これにより、書き換えループが発生します。あなたはおそらく望んでいた:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
  3. 2 番目と 3 番目のルールが適用されることはありません/some-page.html。最初のルールの正規表現が一致し、URI が に書き換えられることを誰かが要求した場合/category.php?id=some-page、最初のルールがすでに URI を に書き換えているため、次のルールが一致しないためcategory.phpです。

  4. 正規表現は先頭のスラッシュに一致します。URI が htaccess ファイル内にある書き換えルールに適用されている場合、先頭のスラッシュが取り除かれているため、代わりにこれが必要です。

    RewriteRule ^([^./]+)\.html$ category.php?id=$1 
    

1、2、4は簡単です。3、あまりない。HTML ページをカテゴリ、タグ、またはプレイとして表現するための独自の方法を見つけ出す必要があります。3 つすべてを同じように見せることはできません。どちらが必要かを判断する方法はありません。取った:

/something.html

それはカテゴリーであるはずですか?タグ?またはプレイ?誰が知っている、あなたの書き換えルールは確かにそうではありません。ただし、それぞれの前にキーワードを付けると、次のように区別できます。

/category/something.html
/tag/something.html
/play/something.html

ルールは次のようになります。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category/([^./]+)\.html$ category.php?id=$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tag/([^./]+)\.html$ tag.php?id=$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^play/([^./]+)\.html$ play.php?id=$1 
于 2012-10-04T19:16:36.170 に答える
0

Apache で mod_rewrite がオンになっていることを確認しますか? httpd.conf にアクセスできますか? .htaccess ファイルを使用する代わりに、そこでリダイレクトを行う方がよいでしょう。

于 2012-10-04T12:36:06.687 に答える