我正在为我的婚礼网站设置重定向,以便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
,它按预期工作,除了我没有得到一个漂亮的网址(我必须使用 q=something
而不是 q/something
)。我不太擅长mod_rewrite,所以我想知道是否有人可以给我一些帮助,让我知道我做错了什么。
谢谢!
你需要告诉 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
是用户输入