0

私は現在、apacheコードを使用しています:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Categories + Page:
RewriteRule ^([a-z\-]+)/([a-z\-]+)$ /index.php?category=$1&page=$2
RewriteRule ^([a-z\-]+)/([a-z\-]+)/$ /index.php?category=$1&page=$2
# Categories:
RewriteRule ^([a-z\-]+)$ /index.php?category=$1
RewriteRule ^([a-z\-]+)/$ /index.php?category=$1

これにより、URLがexample.com?category = software&page=mobileからexample.com/software/mobile/に変わります。

これは正常に機能し、phpファイルは$_GET['category']正常に動作します。ただし、何らかの理由で、$ _GET['page']を認識しません。毎回空になるだけです。

私はApacheコードに関しては最高ではないので、どこで問題が発生したかを誰かに教えてもらえますか?

phpで変数を取得するために使用しているコードは次のとおりです。

$category = $_GET['category'];
$page = $_GET['page'];

また、誰かが私がそれを最適化して、任意の数のパラメーターで機能できるようにするのを手伝ってくれるなら、それはさらに良いでしょう。

ありがとう!

4

1 に答える 1

1
RewriteRule ^([a-z\-]+)/([a-z\-]+)$ /index.php?category=$1&page=$2 [PT,L,QSA]
RewriteRule ^([a-z\-]+)/([a-z\-]+)/$ /index.php?category=$1&page=$2 [PT,L,QSA]
# Categories:
RewriteRule ^([a-z\-]+)$ /index.php?category=$1 [PT,L,QSA]
RewriteRule ^([a-z\-]+)/$ /index.php?category=$1 [PT,L,QSA]

QSAを追加すると役立つ場合があります

置換URIにクエリ文字列が含まれている場合、RewriteRuleのデフォルトの動作では、既存のクエリ文字列を破棄し、新しく生成されたものに置き換えます。[QSA]フラグを使用すると、クエリ文字列が結合されます。

次のルールを検討してください。

RewriteRule /pages/(.+)/page.php?page=$1 [QSA]

[QSA]フラグを使用すると、/ pages / 123?one=twoのリクエストが/page.php?page=123&one=twoにマップされます。[QSA]フラグがないと、同じリクエストが/page.php?page=123にマップされます。つまり、既存のクエリ文字列は破棄されます。

于 2013-01-25T19:45:04.647 に答える