2012-04-22 70 views
0

我正在爲我的婚禮網站設置重定向,因此http://www.mydomain.com/rsvp.php/q/something重定向到http://www.mydomain.com/rsvp.php?q=something,但僅在服務器端(即客戶端仍在其地址欄中看到rsvp.php/q/something)。Apache重定向工作不正常

現在,我在我的Apache配置下面這個網站:

<VirtualHost *> 
     ServerAdmin [email protected] 
     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查詢變量中沒有任何內容):

<?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並不擅長,所以我想知道是否有人可以給我一些幫助,讓我知道我做錯了什麼。

謝謝!

回答

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是用戶輸入

+0

對不起......我沒有正確閱讀帖子。這很好,謝謝。 – jwir3 2012-04-22 21:11:35