0

我正在为我的婚礼网站设置重定向,以便http://www.mydomain.com/rsvp.php/q/something重定向到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/">';
        }
?>

同样,这似乎工作正常,但有一个例外。我正在使用一个表格让用户输入他们的 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 回答