htaccess /重写规则问题......任何想法?

时间:2012-06-20 12:59:14

标签: php apache .htaccess mod-rewrite post

我花了最近24小时在这里寻找解决问题的方法,并通过搜索谷歌,但我一直找不到任何东西。对不起,如果这在任何地方重复。

对于我的网站的最新版本,用PHP编写,我只有一个索引页面,我使用这样的请求来获取正确的页面:

?public=view/thispage
?page=account/loggedin

我现在正在编写网站的新版本,也是在php中,我试图让它有搜索引擎友好的网址/ slugs例如

/page/view/thispage
/account/login

我设法得到它,以便虚拟子域可以为每个客户端工作,使用下面代码的顶部部分,我已经设法使用底部部分使用slug页面。

我遇到的问题是表单,例如注册网站的表单,编辑用户配置文件等。我在这个网站上看到用apache重写$ _POST变量应该传递给脚本,与重定向不同,但我正在使用重写,当任何表单数据传递给slug(例如/ profile / edit)时,它不起作用,尽管如果它被传递给virtualsubdomain.mydomain.com/test.php它的例子。

任何人都可以帮我找到解决htaccess文件的方法,并允许将$ _POST变量传递给我的slug脚本(下面的代码中的index.php)?可能只是我遗失的一件小事。

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.mydomainhere.org
RewriteCond %{HTTP_HOST} ^(.+).mydomainhere.org/^(.+)
RewriteRule ^([^/]*)$ http://mydomainhere.org [P,L]

ErrorDocument 404 /index.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php
</IfModule>

我无法弄清楚为什么post文件可以通过仅存在于虚拟子域中的php文件读取,但是当将它们发布到slug(例如/ profile / editprofile)时无法读取它们。全局变量在我的服务器上关闭但以下只显示默认的空白变量,因此它们显然没有被传递。

$test = ''; //define the variable to please global vars off
$test = $_POST["namehere"];
echo $test;

任何帮助将不胜感激。我非常擅长将htaccess文件用于除了包含自定义错误文件之外的其他任何内容,您可能已经知道了。

1 个答案:

答案 0 :(得分:1)

我只是猜测因为您的.htaccess RewriteCond和其他人遇到同样的问题 - 您将任何子域名(www除外或不包含www.的网址)重定向到您的域名没有www.的网址 - 如果我说得对:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.mydomainhere.org
RewriteCond %{HTTP_HOST} ^(.+).mydomainhere.org/^(.+)
RewriteRule ^([^/]*)$ http://mydomainhere.org [P,L]

然后在您的表单中您可能在action属性中包含不包含www.的网址,因此此操作网址会被重定向,并且POST可能会丢失...

尝试使用包含action的网址填充您的表单www.属性:

<form method="POST" action="http://www.mydomainhere.org/my_page_to_post_to.php">

也许这会有所帮助......