0

これについて少し助けが必要です。

クエリ文字列を収集し、データベースと照合して一致をテストし、ユーザーをサイトの別のセクションにリダイレクトする php ページを作成中です。

現在の動作は次のとおりです(htaccess / mod_rewriteなし):

  1. ユーザーの訪問: domain.com/redirect/index.php?slug=Test_1
  2. PHP ページは、データベースで「Test_1」をサニタイズして検索し、ユーザーをリダイレクトする宛先 URL を取得します。(例: domain.com/New_Test_1)
  3. PHP ページは、それに応じて 301 リダイレクトします。

この部分は正常に動作しています。ただし、制御できない変数があるため、次のように元の URL を (htaccess/mod_rewrite を使用して) 解釈する必要があります。

  • domain.com/redirect/index.php/Test_1

これはまだ次と同じように機能します:

  • domain.com/redirect/index.php?slug=Test_1

(注: はい、index.php は URL にとどまる必要があります。)

私はこれをhtaccessで次のように動作させていますが、それがより良い可能性があることを知っています:

RewriteEngine On
Options +FollowSymLinks

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ %{DOCUMENT_ROOT}/redirect/index.php?slug=$2 [PT,L,QSA]

助けが必要な部分...

一部の古い URL スラッグには、次のようにスラッシュが含まれていました。

  • domain.com/redirect/index.php?slug=How_to_Code/Program

htaccess がなくても、上記は引き続き機能しますが、pretty(ier) url で失敗します。

  • domain.com/redirect/index.php/How_to_Code/Program

私の現在の htaccess では、「How_to_Code」部分のみをキャプチャし、それ以降はすべて無視します。

私の質問はこれです: htaccess を再構築して、スラッシュを含め、domain.com/redirect/index.php/(.*)$ の後のすべてを取得するにはどうすればよいですか?

編集: この .htaccess は /redirect ディレクトリ内にあります

4

1 に答える 1

0

こうすれば

RewriteRule ^redirect/index.php/([a-zA-Z0-9/_]+)$ redirect/index.php?slug=$1

これは、スラッシュとアンダースコアを受け入れます。許可されている文字を追加するには、角括弧 [] 内に追加します。特定の文字をエスケープする必要がある場合があるため、Google で検索してください。

于 2012-07-20T12:24:18.807 に答える