一个非常简单的问题,但仍然找不到任何答案。
我需要为所有情况重写条件。我不在乎如果目录,文件或任何存在或不存在。只需直接进入重写规则。
这就是我所拥有的:
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文件。 为了使这个系统工作,我需要做:
一些代码:
.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
答案 0 :(得分:0)
您可以使用此基于预后的负面规则:
Options -Indexes
RewriteEngine on
RewriteRule ^((?!index\.php$).*)$ index.php?url=$1 [QSA,L,NC]
如果请求URI为(?!index\.php$)
index.php
是一个负面预测,会阻止重写规则的执行