如何解决.htaccess将具有特定路径的URL重定向到404,并排除某些具有与异常相同的路径的URL
我在Codeigniter(3.1.11)上有一个应用程序。基本上,我想对URI中有dashboard
的URL进行404重定向。像这样:
dashboard/foo/bar
dashboard/foo-2/bar-2
dashboard/something
...
此外,我想在重定向规则中保留一些例外,因此,应将某些以dashboard
作为路径URI的特定URL从此重定向中排除。假设我要排除某些网址,例如:
dashboard/new-foo/new-bar
dashboard/one-thing/abc
dashboard/another-thing/xyz
我做了几次尝试,但排除规则不起作用。它将所有URL重定向到404。这就是我的.htaccess文件中的内容:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(dashboard/new-foo/new-bar) [NC] # Exclude this url (this condition is not working)
RewriteRule ^(.*)$ dashboard/$1 [R=404,L]
RewriteEngine on
RewriteCond $1 !^(index\.PHP|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.PHP/$1 [L,QSA]
解决方法
可以在单个规则中使用负先行条件来完成,例如:
RewriteEngine on
RewriteRule ^dashboard(?!/new-foo/new-bar|/one-thing/abc|/another-thing/xyz) - [R=404,NC,L]
RewriteCond $1 !^(index\.php|resources|robots\.txt) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
,
我不是htaccess的专家,但是我很确定您需要2个RewriteCond行,其中一个包含所有仪表板URL,第二个包含新的URL。每个RewriteCond都隐含一个“ AND”,因此,如果要排除的模式很多,并且需要一个第三RewriteCode,则在第二个条件下,您需要将第三个以“ OR”进行连接。
例如
RewriteCond %{REQUEST_URI} ^/dashboard/(.*) [NC]
RewriteCond %{REQUEST_URI} !^/dashboard/new-(.*) [NC]
RewriteRule ^(.*)$ 404-page/$1 [R=404,L]
我还要提及其他几件事:1)您的RewriteRule重定向回/ dashboard URL,因此您可能最终会在这里连续浏览。 2)您无需打开重写引擎两次,一次在顶部就足够了。
如果htaccess中的重写规则变得越来越复杂,那么您可以使用index.php文件来处理它(或Codeigniter中的其他方法)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。