Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mod rewrite 如何修改重写整个站点,不包括几个子目录?_Mod Rewrite - Fatal编程技术网

Mod rewrite 如何修改重写整个站点,不包括几个子目录?

Mod rewrite 如何修改重写整个站点,不包括几个子目录?,mod-rewrite,Mod Rewrite,我有个小问题。我有一个很好的设置,mod会重写对站点的所有请求-唯一的事情是它还会重写我不想包含的目录 我正在.htaccess文件中使用以下代码: RewriteEngine on RewriteRule ^([^/\.]+)/?$ index.php?section=$1 [L] RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?section=$1&page=$2 [L] RewriteRule ^([^/\.]+)/([^/\.]+)/(

我有个小问题。我有一个很好的设置,mod会重写对站点的所有请求-唯一的事情是它还会重写我不想包含的目录

我正在.htaccess文件中使用以下代码:

RewriteEngine on
RewriteRule ^([^/\.]+)/?$ index.php?section=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?section=$1&page=$2 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?section=$1&page=$2&split=$3 [L]
理想情况下,我希望能够排除两个目录-access/和edit/-edit/还需要有自己的一套规则:

RewriteRule ^([^/\.]+)/?$ index.php?action=$1 [L]
我可以通过直接链接到任一目录中的.php文件来解决这个问题,但这并不理想

有什么建议吗?

使用

(这是未经测试的,但应该很接近)

另一个想法(也未经测试):


这将使您不必在每个规则之前重复重写cond。

是的,应该很接近。然后再为编辑子目录添加一个重写条件。没有骰子。我认为服务器忽略了这个条件,直接执行第一条重写规则。我认为这一定与重写规则的编写方式有关,但我的正则表达式非常有限——即使这样做也是为了找到一个合适的教程。FWIW我认为应该是%{REQUEST_URI}而不是${REQUEST_URI}是的,这肯定更优雅。第二行可以工作。但服务器仍在使用其他编辑/目录规则。是否可以尝试限制较少的正则表达式?像^/edit/(.*)$还是没有乐趣。。。不幸的是。
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(access|edit)/
RewriteRule ^([^/\.]+)/?$ index.php?section=$1 [L]
...
RewriteEngine on
RewriteRule ^/access/ - [L]
RewriteRule ^/edit/([^/\.]+)/?$ /edit/index.php?action=$1 [L]
... (other rules)