如何只为php文件编写mod_rewrite规则


how to write mod_rewrite rules just for php files

我正试图为我的站点目录编写一条规则。

我试过这样的东西:

RewriteEngine on
RewriteRule ^(css|font|img|js)/([a-zA-Z0-9'/'.])$ $1/$2 [L]
RewriteRule ^([a-zA-Z0-9'/'_]*)$ index.php?url=$1 [L]

但我不明白为什么它不太好用。

1-我希望用户可以直接访问这些目录css|font|img|js(仅适用于文件,不适用于目录列表。将目录列表重写为403.php

2-我希望用户可以直接访问视图目录中的*.js|*.css文件。(不是其他文件。将其他文件重写为403.php

3-我想每隔一个url重写一次index.php?url=$1

提前谢谢。

模式的这一部分:/([a-zA-Z0-9'/'.])$表示斜线,后面紧跟字母、数字斜线或点中的一个字符,然后是末尾。我猜你想要这样的东西:

ErrorDocument 403 /403.php
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(css|font|img|js)/ - [L,F]
RewriteCond %{REQUEST_URI} !'.(js|css)$
RewriteRule ^view/ - [L,F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]

您可以尝试以下规则:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule !^(css|font|img|js)/ /403.php [NC,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} '.(css|js)$ [NC]
RewriteRule !^view/ /403.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]

使用RewriteCond怎么样?

你可以做一些类似的事情:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(css|font|img|js)/
RewriteRule .* - [L]
RewriteRule ^([a-zA-Z0-9'/'_]*)$ index.php?url=$1 [L]

通过这种方式,您可以对cssfontjs目录中的文件执行noop重写,并对所有其他URL执行index.php重写。

RewriteEngine on
Options -Indexes
RewriteCond %{REQUEST_URI} .php$ [OR]
RewriteRule ^(.*)$ target_file.php?=url$1 [L,NC]
#allow access to file js and css
RewriteCond %{REQUEST_URI} .(css|js)$
RewriteRule ^(.*)$ - [L,NC]

当使用[L,NC]时,不要重定向到其他页面:

如果您访问localhost/page.php,这不会重定向到target_file.php吗?url=/page.php

但在相同的url中继续,并显示文件target_file.php