apache不使用mod重写规则从子目录文件发布表单数据

时间:2011-03-21 16:26:01

标签: mod-rewrite scope

难倒在这里。在使用Mod-rewrite时,是否需要了解一些文件结构“变量范围”概念?

我有一个像这样的文件结构

/modules/modulename/index.php(此文件导入包含文件form_inc.php /modules/modulename/form_inc.php

如果我回复到同一个文件/modules/modulename/index.php,则没有可用的帖子数据。

如果我发布到根域中的文件,则会有帖子数据。 ???

我应该注意,结构中的索引文件是一个真实的文件,但它是从根目录下的index.php调用的。所以基本上我有从根index.php处理的SEF URL。但我想在我的modules文件夹中有一个php文件来处理表单。在我尝试添加SEF URL之前,所有这些都有效。

离。 www.mydomain.com/contact-us/form包含来自/modules/contactform/index.php的表单,表单的操作正在尝试使用/modules/contactform/process.php,但没有发布数据!但是有根index.php的帖子数据是我的主要“路由器”文件。如果我把我的process.php文件放在teh root中就行了。但不是我想要那个文件的地方。

这是我的mod重写规则

Options +FollowSymLinks
RewriteEngine On
#RewriteBase /orientation_dev
RewriteBase /

#if the file exist pass it on thru and exit.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+) $1 [L]                

#if the file NOT a directory redirect to index
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^(.+)/$ index.php?q=$1 [L]
RewriteRule ^(.+)$ $1/ [L,R=301]

感谢您对此有任何见解!

1 个答案:

答案 0 :(得分:0)

发现此代码似乎解决了我的POST DATA问题。我认为我的帖子也被重定向,这是我以前的mod重写规则所没想到的。

  # 301 Redirect all requests that don't contain a dot or trailing slash to
  # include a trailing slash
  # except for form POSTS

    RewriteCond %{REQUEST_URI} !\.
    RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L,NE]

    # Rewrites urls in the form of /parent/child/
    # but only rewrites if the requested URL is not a file or directory
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php?q=$1 [QSA,NE]