Apache Htaccess重写规则

Apache Htaccess重写规则,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我对.htaccess和rewrite规则很着迷。 我想了解它是如何工作的,我讨厌它,不管怎样,这是我的问题 (对你们大多数人来说都很简单) 我的网站有一个主页index.php。 这是唯一一个页面,所有其他页面都由这个页面处理 我做了一个简单的重写规则: RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 为此: /index.php?page=VAL -> /VAL 但我不知道如何为此创建规则: /index.php?page=VAL&

我对.htaccess和rewrite规则很着迷。 我想了解它是如何工作的,我讨厌它,不管怎样,这是我的问题

(对你们大多数人来说都很简单)

我的网站有一个主页
index.php
。 这是唯一一个页面,所有其他页面都由这个页面处理

我做了一个简单的
重写规则

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1
为此:

/index.php?page=VAL -> /VAL
但我不知道如何为此创建规则:

/index.php?page=VAL&var1=VAL2&var2=VAL3 etc.
我想要一个最终的URL,如:

/VAL/VAL2/VAL3 etc.

谢谢

您可以将请求重写为index.php,并使用php解析请求的URI路径:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = implode('/', ltrim($_SERVER['REQUEST_URI_PATH'], '/'));
规则是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]

这将重写每个请求,即URI路径无法映射到现有文件,映射到index.php。

好的,如果我理解得很好,重写COND将检查uripath是否不是文件,但您能解释一下重写规则的作用吗?thanks@Marcx:重写规则将重写任何请求,即URI路径(不带路径前缀)不是
index.php
,而是
index.php
。谢谢。。所以
not
index.php
(路径前缀)将被重写为
index.php
好的,非常感谢..@Marcx:哦,是的,
对表达式求反。因此,如果
^index\.php$
不匹配,则应用该规则。