你有一个额外的斜线。.htaccess
不像 a 那样使用前面的斜线Virtual Host
。也是/login/
一个目录。因此,您匹配的不是真实文件,但可能是真实目录。因此,如果例如 '/css/' 存在,您将其重写为 index.php 作为请求操作。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+) index.php?action=$1
如果它仍然出现意外,您可能需要确保您没有重写现有目录并尝试以下操作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+) index.php?action=$1
我还注意到,由于您使用的是?
查找功能,因此您在发布的示例代码中只能捕获到第一个斜杠(可能),所以在我之前的布局中,我显示的代码要短一些。要捕获整个URI,您可以使用:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^(.*) index.php?action=$1
要捕获第二个(和第三个)字符串,您可以执行以下操作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+)/([^/]+)/([^/]+) index.php?action=$1&page=$2&response=$3