RewriteCond%{REQUEST_FILENAME}全部

时间:2014-09-02 14:41:13

标签: apache .htaccess mod-rewrite

一个非常简单的问题,但仍然找不到任何答案。

我需要为所有情况重写条件。我不在乎如果目录,文件或任何存在或不存在。只需直接进入重写规则。

这就是我所拥有的:

Options -Indexes
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

该规则仅适用于非现有文件。但是我希望得到用户输入的内容,因为url-string是用php处理的,它决定了如何处理它。

编辑 ======================================= ======================================

这个问题得到了回答,但事实证明这不是我需要的。所以这里有新修改的问题:

整个网站都在Ajax上运行。意思是,只有一个index.php文件,其中包含网站的框架。每个其他页面/内容都通过Ajax加载。因此,有一个名为“pages”的文件夹,其中包含加载到index.php中的所有内容php文件。 为了使这个系统工作,我需要做:

  1. 通过.htaccess
  2. 捕获用户输入的输入
  3. 将输入字符串传递给php,它试图了解用户想要去的地方,并将地址传递给javascript
  4. javascript使用ajax加载内容。
  5. 一些代码:

    .htaccess - 见上文

    PHP:

    $pass = $_GET['url'];
    $pass = str_replace(".php", "", $pass);
    $pass = str_replace(".html", "", $pass);
    $pass = str_replace("pages/", "", $pass);
    
    $dirtest = "pages/" . $pass . ".php";
    $isdir = file_exists($dirtest);
    
    if ($pass == "") {
        $pass = "news";
    }else{
        if (!$isdir){
            $pass = "pageNotFound";
        }
    }
    echo $pass;
    

    的Ajax: 这是一个大文件,所以我不想在这里垃圾邮件,但它基本上需要$ pass并且用它做一些ajax加载函数。

    这是一个问题: 当用户想要访问ex:download页面时:他输入 “(现场)/下载”。由于此目录中不存在此特定文件,因此.htaccess将“download”传递给php,后者检查在pages文件夹中是否存在download.php,并且由于这是真的,它将“下载”传递给Ajax。 Ajax从index.php中的pages / download.php加载。这应该是这样的。 但是,如果用户键入“(site)/ pages / download”,该怎么办? .htaccess注意到这个文件存在于这个目录中并且没有将任何参数传递给php,这会破坏一切。

    我需要什么: 我需要以某种方式操纵url请求以不允许直接访问/ pages /但允许在ajax调用它时进行访问。

    如果您需要更多详细信息或显式代码,请访问以下是GitHub存储库: GitHub

1 个答案:

答案 0 :(得分:0)

您可以使用此基于预后的负面规则:

Options -Indexes
RewriteEngine on

RewriteRule ^((?!index\.php$).*)$ index.php?url=$1 [QSA,L,NC]

如果请求URI为(?!index\.php$)

index.php是一个负面预测,会阻止重写规则的执行