2017-06-13 35 views
1

我有2個簡單文件register.phpuser-insert.php。與方法POST

register.php文件保存的HTML表單,提交按鈕命名submit在以下幾點:

<form action="user-insert.php" class="contact-form" method="post"> 
    <ul>       
     <li> 
      <label for="who-are-you" class="first-col">Who are you?</label> 
      <select name="who-are-you" id="who-are-you" class="select"> 
       <optgroup label="Who are you?"> 
        <option value="1">Employer</option> 
        <option value="0">Employee</option> 
       </optgroup> 
      </select> 
     </li> 
     <li> 
      <label for="email" class="first-col">Email</label> 
      <input id="email" type="email" name="email" placeholder="[email protected]" required /> 
     </li>    
    </ul> 
    <input type="submit" name="submit" value="Sign Up" class="btn btn-primary" /> 
</form> 

而且有user-insert.php文件:

session_start(); // tried to remove this, but It do nothing with this problem 

// there checking for an errors 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

require_once("connect.php"); 

if(isset($_POST['submit'])) { 
    // do something 
} else { 
    echo "POST false"; 
} 

它總是返回我POST false。沒有任何錯誤。只有POST未設置。

問題

問題是.htaccess,如果我從這個文件它開始工作刪除相關內容。 .htaccess現在從www.mysite.com/any-file.php重定向到www.mysite.com/any-file/。也許你有什麼想法嗎?

.htaccess文件看起來像:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+(?:(?:index|(.+))\.php)?\?lang=lt\s [NC] 
RewriteRule^%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+([^.?]+)/?\?lang=lt\s [NC] 
RewriteRule^%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(?:(?:index|(.+))\.php)?\?lang=(en)\s [NC] 
RewriteRule^%2/%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+([^.?]+)/?\?lang=(en)\s [NC] 
RewriteRule^%2/%1? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3/%4? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+\.php)\?lang=lt&(\S*)\s [NC] 
RewriteRule^%1?%2 [L,NE,R=302] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)\s [NC] 
RewriteRule^%1/%2? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%1/%2/%3? [R=302,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php\s [NC] 
RewriteRule^%1%2/ [R=302,L,NE] 

# url is ONLY '/en' or '/lt' -> redirect to /en/ or /lt/ (adding slash) 
RewriteRule ^(en|lt)$ $1/ [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{QUERY_STRING} !(^|&)lang=(en|lt)(&|$) [NC] 
RewriteRule ^(?!(?:en|lt)/)(.+)$ lt/$1 [DPI,NC] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{DOCUMENT_ROOT}/$2.php !-f 
RewriteRule ^(en|lt)/([\w-]+)/?$ - [L] 

# now all urls have en/ lt/ -> parse them 
RewriteRule ^(en|lt)/$ index.php?lang=$1 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/?$ /$2.php?lang=$1 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/?$ /$2.php?lang=$1&id=$3 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/([\w-]+)/?$ /$2.php?lang=$1&id=$3&param=$4 [L,NC,QSA] 
+0

任何觸發重定向的重寫都會丟棄發佈數據。你真的需要重定向嗎? – apokryfos

+0

@apokryfos我真的需要像'www.mysite.com/etc/something /'這樣的網址,而不是'www.mysite.com/etc.php?param = something'有無重定向我無所謂。 – Infinity

+0

然後將操作設置爲不會觸發重定向的網址,例如'/ user-insert /' – apokryfos

回答

2

重定向與,而不是重定向後發送POST數據。您可以使用作爲重定向代碼以重定向發佈數據。

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+(?:(?:index|(.+))\.php)?\?lang=lt\s [NC] 
RewriteRule^%1? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+([^.?]+)/?\?lang=lt\s [NC] 
RewriteRule^%1? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(?:(?:index|(.+))\.php)?\?lang=(en)\s [NC] 
RewriteRule^%2/%1? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+([^.?]+)/?\?lang=(en)\s [NC] 
RewriteRule^%2/%1? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?lang=(en)&id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%2/%1/%3/%4? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+\.php)\?lang=lt&(\S*)\s [NC] 
RewriteRule^%1?%2 [L,NE,R=307] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)\s [NC] 
RewriteRule^%1/%2? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.+)\.php\?id=([^\s&]+)&param=([^\s&]+)\s [NC] 
RewriteRule^%1/%2/%3? [R=307,L,NE] 

RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php\s [NC] 
RewriteRule^%1%2/ [R=307,L,NE] 

# url is ONLY '/en' or '/lt' -> redirect to /en/ or /lt/ (adding slash) 
RewriteRule ^(en|lt)$ $1/ [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{QUERY_STRING} !(^|&)lang=(en|lt)(&|$) [NC] 
RewriteRule ^(?!(?:en|lt)/)(.+)$ lt/$1 [DPI,NC] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{DOCUMENT_ROOT}/$2.php !-f 
RewriteRule ^(en|lt)/([\w-]+)/?$ - [L] 

# now all urls have en/ lt/ -> parse them 
RewriteRule ^(en|lt)/$ index.php?lang=$1 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/?$ /$2.php?lang=$1 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/?$ /$2.php?lang=$1&id=$3 [L,NC,QSA] 

RewriteRule ^(en|lt)/([\w-]+)/([\w-]+)/([\w-]+)/?$ /$2.php?lang=$1&id=$3&param=$4 [L,NC,QSA] 
+0

最後,非常感謝! – Infinity

+0

不客氣。如果有效,請接受答案。 –