我有一个应用程序,其中大部分仍在开发中,这就是为什么我需要在所有页面上阻止访问,但不是两个。
假设我有a.php,除了b.php之外,所有请求都会被重定向到这里。
所以我认为应该有3条规则:
1st: when a.php and b.php are requested they should be visible to user,
2nd: if anything other than those two is requested,
it should be redirected to a.php.
3rd: for external css,javascript and image files
there should be an access rule
由于我没有太多的服务器管理经验,我相信我完全迷失了:)
这是我试过的:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^/b.php
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ a.php
答案 0 :(得分:2)
我不确定你对#3的意思,但是从你正在尝试的内容看,我想你的意思是,所有的js,ico,......都要重定向到a.php。是吗?
如果是这样,那意味着,a => a.php(带参数),b => b.php(带参数)和其他=> a.php只会。所以试试这个:
RewriteBase /
RewriteRule ^a\.php(.*) /a.php$1
RewriteRule ^b\.php(.*) /b.php$1
RewriteRule ^.* /a.php
但是,如果您的意思是所有这些脚本和媒体文件都可以正常访问,请尝试以下方法:
RewriteBase /
RewriteRule ^a\.php(.*) /a.php$1
RewriteRule ^b\.php(.*) /b.php$1
RewriteRule ^(.*)\.(js|ico|txt|gif|jpg|png|css)$ /$1.$2
基本上,重写规则是正则表达式,$ 1,$ 2,...是匹配字符串组(用“(”和“)”包装的那些)。
希望得到这个帮助。
答案 1 :(得分:2)
实际上,你会交换第二和第三条规则,因为你的第二条规则是默认路线:
# 1st
RewriteRule ^(a\.php|b\.php)$ - [L]
# 3rd
RewriteRule \.(js|ico|txt|gif|jpg|png|css)$ - [L]
# 2nd
RewriteRule !^a\.php$ a.php [L]
替换-
表示URI未更改。