Rap*_*ger 1 php apache .htaccess
我在我的网站root中有一个通用的重写规则,如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1
Run Code Online (Sandbox Code Playgroud)
适用于将"www.example.com/myAction"等网址重写为"www.example.com/index.php?action=myAction"
这必须保持这样,但我需要从重写中排除子目录("/ login").
所以我尝试过:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/
RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1
Run Code Online (Sandbox Code Playgroud)
但仍然没有运气.我在这里读了几个答案,但是找不到这个缺陷.有任何想法吗?谢谢!
你有一个额外的斜线..htaccess不使用前面的斜杠Virtual Host.也是/login/一个目录.所以你匹配的不是真正的文件,但可能是真正的目录.因此,如果存在'/ css /',则将其重写为index.php作为请求时的操作.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+) index.php?action=$1
Run Code Online (Sandbox Code Playgroud)
如果它仍然意外地执行,您可能需要确保不重写现有目录并尝试这样做:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+) index.php?action=$1
Run Code Online (Sandbox Code Playgroud)
我还注意到你只使用你发布的示例代码捕获了第一个斜杠(可能),因为你正在使用?查找,所以在我以前的布局中我显示的代码有点短.要捕获整个URI,您可以使用:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^(.*) index.php?action=$1
Run Code Online (Sandbox Code Playgroud)
要捕获第二个(和第三个)字符串,您可以执行以下操作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^login/
RewriteRule ^([^/]+)/([^/]+)/([^/]+) index.php?action=$1&page=$2&response=$3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |