2

/gallery/X から gallery.php?category=X にリダイレクトしたい

しかし、実際にアドレスに移動すると、古い $_GET 変数「カテゴリ」は次の形式に変換されます。

$_GET['category'] = "X.php/X"   

これは私の .htaccess がどのように見えるかです:

RewriteBase /

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond  %{REQUEST_FILENAME} !-d
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L]

私は RegEx が非常に苦手で、.htaccess についてはほとんど何も知りません。$_GET 変数を保持するために、この書き換えルールをいじってみましたが、何もうまくいかないようです。ここで何をすればいいですか?

ありがとう!

4

1 に答える 1

3

ルールを移動します。

RewriteEngine on
RewriteBase /

RewriteCond  %{REQUEST_FILENAME} !-d
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

QSAまた、アクションに を追加します[L,QSA]。これにより、リダイレクト中にクエリ文字列が追加されるため、以前のデータが保持されます。

説明:

[L]オプションはサーバーに対してまったく新しいリクエストを行うようなものであるため、書き換えは特定の順序で行う必要があります。そのため、 へのリクエストが届いたときに、リクエストをgallery/Xに書き換えました/gallery.php?category=X。このページがサーバーによってリクエストされたとき、最初のルールと一致しました。つまりX.php/X、元のリクエストに余分な$1.

紛らわしいように聞こえますが、それが起こっていたことだと思います。

于 2012-07-26T02:54:08.367 に答える