2015-12-14 37 views
1

我创建以下.htaccess文件,我想知道是否可以改进:如何改进这个.htaccess文件?

RewriteEngine On 

RewriteRule ^site$ ./site/ [L,NC] 
RewriteRule ^site/(.*)$ ./main/$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/en [NC] 
RewriteRule ^(.*)$ ./404.php?url=$1 [L,NC] 

我想重定向其输入www.domain.com/site/到www.domain.com/main/游客和所有其他请求www.domain.com/404.php?url = ...这有效,除非用户没有输入斜线(www.domain.com/site)。

回答

0

你应该可以做到这一点与/?像

RewriteEngine On 

RewriteRule ^site$ ./site/? [L,NC] 
RewriteRule ^site/(.*)$ ./main/$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/en [NC] 
RewriteRule ^(.*)$ ./404.php?url=$1 [L,NC] 
0

对于第一条规则,你重写sitesite/,然后重写site/main/。我宁愿一步完成,例如

RewriteRule ^site/?$ ./main/ [L,NC] 

第二条规则将保持原样。


根据目前的规则,您只能将不存在的路径重定向到404.php。如果这是你想要的,一切都很好。如果没有,你应该删除!-f!-d条件和添加条件被改写为404

RewriteCond %{REQUEST_URI} !/main/ [NC] 

即使替代./404.php是有效的,我将它写成

RewriteRule ^(.*)$ 404.php?url=$1 [L,NC] 
排除 main