0

htaccess と mod_rewrite を使用して、これらのスタイルで 2 種類の URL を作成したいと考えています。

http://www.site.com/product
http://www.site.com/product/1/something

このために、htaccess ファイルに次の行を追加しました。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&id=$2&des=$3 [N]
RewriteRule ^([^/]*)$ /index.php?p=$1 [F]

しかし、アプリケーションを実行してhttp://localhost/project/をヒントするたびに、Web サーバーは私をhttp://localhost/にリダイレクトします。

今、私は2つの質問があります:

  1. localhost にリダイレクトするのはなぜですか? また、上記のコードが機能しないのはなぜですか?
  2. クリーンな URL の末尾にスラッシュを追加するにはどうすればよいですか?
4

2 に答える 2

1
  1. RewriteBase / を追加すると役立つはずです

  2. ルールを次のように変更します

    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?p=$1&id=$2&des=$3 [N]
    RewriteRule ^([^/]*)/?$ /index.php?p=$1 [F]
    

最終的な .htaccess は次のようになります。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?p=$1&id=$2&des=$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ /index.php?p=$1 [L]
于 2012-07-21T20:02:40.630 に答える
0

Nおそらくフラグとフラグを取り除きたいでしょうF。リダイレクトされる理由がわかりません。あなたが持っているルールがそれを担当しているようには見えません。また、両方のルールに対して次の 2 つの条件を繰り返します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&id=$2&des=$3 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ /index.php?p=$1 [L,QSA]
于 2012-07-22T12:56:04.947 に答える