2013-11-20 21 views
1

我正在尝试为我的网站的目录编写规则。如何编写仅用于php文件的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-我想每一个其他的URL改写为index.php?url=$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] 
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

如何使用RewriteCond

你可以这样做:

RewriteEngine On 

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

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

这样,你做一个空操作改写为CSS字体IMGJS目录内的文件,并做index.php重写所有其他URL。

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]没有自动跳转到其他页面:

如果您访问本地主机/ page.php文件这不重定向到target_file.php URL =/page.php文件

但在相同的网址继续并出现文件target_file.php