POST变量使用mod_rewrite规则丢失(不正确)

时间:2016-12-16 23:28:43

标签: php apache .htaccess redirect mod-rewrite

修改:错误结果是忘记设置name属性。它与我的.htaccess无关。

anubhava已帮助我on thison this。我再一次与mod_rewrite挣扎,我想简化它并处理我的PHP代码中的请求,这样我再也不用再费心mod_rewrite,因为它让我疯狂。因此,我简化了.htaccess文件的当前迭代,如下所示:

# RewriteBase and ErrorDcoument have a conflict
RewriteEngine On
RewriteBase /Homepage
ErrorDocument 403 /Homepage/HttpUnauthorized
ErrorDocument 404 /Homepage/HttpNotFound

# Remove Trailing Slashes
RewriteCond %{REQUEST_METHOD} !=POST [NC]
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)/$ $1 [NC,R=301,L]

# Removes index.php from URLs (actually everywhere, even mid url!)
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) $1$2 [R=301,NE,L]

# Directs all web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=/$1 [L,QSA]

在我的后端(由index.php调用)我正在解析这样的请求:

$queryArguments = explode('/', array_shift($_REQUEST));
// First element is null anyways.
array_shift($queryArguments);
$controllerCustomUrl = array_shift($queryArguments);

http://sandbox.com/Homepage/FooList/Argument1/Argument2之类的内容会产生$controllerCustomUrl = 'FooList'$queryArguments = ['Argument1', 'Argument2']。到目前为止,这种方法效果不错,但我现在正努力提交表格。

当我在http://sandbox.com/Homepage/Test提交我的表单时,浏览器中的网址会更改为http://sandbox.com/Homepage/Test?,最后会出现问号,至少可以说这很奇怪。此外,$_POST变量为空,我在途中丢失了提交的数据。

我很确定这种意外行为是由于我.htaccess中的一些错误指令而发生的,可能是错误的或重定向过多等等,但我似乎无法找到错误的来源。你看到了什么问题吗?

有关规则的更多信息:和以前一样,我想删除所有网址末尾的尾部斜杠,也可以直接(可见)访问index.php并拥有像这样的网址模式{ {1}} /:controller/:arg1/:arg2/.../:argN指示的字符串用于查找相应的页面类文件,同时为其提供:controller:arg1的参数。

按要求提供表格标签:

:argN

1 个答案:

答案 0 :(得分:1)

好的,现在根据您更新的示例[已删除网址],您的表单包含以下元素:

> dt[, .(a,b,res)]
#     a b res
# 1:  1 2   1
# 2: 11 9   9
# 3: 11 8   8
# 4:  2 6   1
# 5:  7 5   5
# 6:  5 3   3
# 7:  6 3   1

<input type="text" class="form-control " id="inputField" placeholder="This form will 
  succeed if you enter 'secret'">

这两个属性都没有<button type="submit" class="btn btn-primary">... 属性,所以它们都被form data set construction algorithm中的步骤3.1跳过,你实际上发送了一个没有任何参数的空POST请求。

编辑:删除了之前的解释,显示的示例当时包含不同的HTML错误。