Apache mod_重写防止覆盖文件夹

Apache mod_重写防止覆盖文件夹,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有以下mod_重写代码: RewriteEngine On RewriteRule /(.*)$ index.php?action=$1 它应该改变,例如 进入 它做得很好,但我所有的文件夹现在也都写过头了。如何告诉mod_rewrite只覆盖根文件夹URL?这应该可以: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/?([^/]

我有以下mod_重写代码:

RewriteEngine On
RewriteRule /(.*)$ index.php?action=$1
它应该改变,例如
进入

它做得很好,但我所有的文件夹现在也都写过头了。如何告诉mod_rewrite只覆盖根文件夹URL?

这应该可以:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)/?$ index.php?action=$1 [L,QSA]

所以你不想重写里面有
/
的东西?只有URL类似于
/abc,/def ghi
,但从来没有
/abc/def
?您是在.htaccess或服务器级/virtualhost配置中定义它的吗?(前导的
/
表示服务器配置,而不是.htaccess)@MichaelBerkowski First:完全正确。第二:just.htaccess,我有一个web服务器,所以没有服务器级别!它不会影响文件夹,但不知何故Joomla并没有真正理解它。如果我自己调用index.php?test=test,它就会工作。但是如果我使用index.php?test=$1调用/test,那么它将不起作用(Joomla显示404)。为什么?你在任何地方都没有提到Joomla。这应该不是问题,因为mod_rewrite应该打开index.php?action=$1。如果我在中键入index.php?action=which,则不会生成404。那么问题出在哪里呢?添加R标志使其
RewriteRule^/?([^/]+)/?$index.php?操作=$1[L,QSA,R]
,然后查看此重定向是否正确。奇怪的是:var/www/vhosts/domain/folder/index.php?action=page2//Edit:他重定向的路径非常完美,但它应该只打开index.php?action=page2