0

http://www.mydomain.com/rsvp.php/q/somethingにリダイレクトされるように、結婚式の Web サイトのリダイレクトを設定してhttp://www.mydomain.com/rsvp.php?q=somethingいますが、サーバー側でのみです (つまり、クライアントrsvp.php/q/somethingのアドレス バーにはまだ表示されます)。

現在、このサイトの apache 構成には次のものがあります。

<VirtualHost *>
        ServerAdmin my@email.com
        ServerName www.mydomain.com
        DocumentRoot /var/www/www.mydomain.com
        Options -Indexes +FollowSymLinks
        RewriteEngine on
        RewriteRule ^/rsvp.php/q/(.*) /rsvp.php?q=$1
</VirtualHost>

ここで、PHP ファイルの先頭に (ユーザーが q クエリ変数に何も持っていない場合に) index.html にリダイレクトするメタリダイレクトもあります。

<?php
  $userHash = $_GET['q'];
?>

<!doctype html>
<html>
        <head>
                <title>Wedding - RSVP Page</title>
<?php

        // If we don't have a user hash, then let's redirect to the main
        // page.
        if (!$userHash) {
          echo '<meta http-equiv="refresh" content="0; url=http://www.mydomain.com/">';
        }
?>

繰り返しますが、これは 1 つの例外を除いて問題なく動作するようです。ユーザーが RSVP データを入力するためのフォームを使用しています。送信時に、スクリプトを呼び出しますsubmit-form.php。アドレスhttp://www.mydomain.com/getID.phpにアクセスすると、index.html にリダイレクトされますが、これは私が望んでいるものではありません。

を削除するとRewriteRule、期待どおりに機能しますが、適切な URL を取得できないことを除きます (q=somethingの代わりに使用する必要がありますq/something)。私は mod_rewrite があまり得意ではないので、誰かが私が間違っていることを教えてくれるのではないかと思っています。

ありがとう!

4

1 に答える 1

1

を使用して、既存のファイルを書き換えないようにApacheに指示する必要がありますRewriteCond

.htaccess に次のコードを追加します。

rewriteengine on
Options +FollowSymLinks

RewriteCond %{SCRIPT_FILENAME} !-d  #not a directory
RewriteCond %{SCRIPT_FILENAME} !-f  #not a file
RewriteRule ^rvsp/([^/\.]+)?$  rvsp.php?q=$1

rvsp.php ファイルに次のコードを追加します。

<?php
$q = $_GET['q'];
?>

フォームのアクションは次のgetID.phpようになります。

http://www.mydomain.com/rvsp/query

queryユーザー入力はどこですか

于 2012-04-22T19:38:31.497 に答える