如何为php文件编写mod_rewrite规则

时间:2013-11-20 14:14:56

标签: php apache .htaccess mod-rewrite

我正在尝试为我的网站目录编写规则。

我试过这样的事情:

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-我想将所有其他网址重写为index.php?url=$1

提前感谢。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下规则:

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]

答案 1 :(得分: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]

答案 2 :(得分:1)

如何使用RewriteCond

您可以执行以下操作:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/(css|font|img|js)/
RewriteRule .* - [L]

RewriteRule ^([a-zA-Z0-9\/\_]*)$ index.php?url=$1 [L]

这样你就可以对 css font img noop 重写> js 目录并对所有其他URL执行index.php重写。

答案 3 :(得分:1)

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

但继续使用相同的网址并显示文件target_file.php