如何改进这个.htaccess文件?

时间:2015-12-14 19:12:36

标签: php .htaccess mod-rewrite

我创建了以下.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)。

2 个答案:

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

答案 1 :(得分:0)

对于第一条规则,您将$seg2重写为site,然后将site/重写为site/。我宁愿一步到位,例如

main/

第二条规则将保持不变。

使用当前规则,您只能将不存在的路径重定向到RewriteRule ^site/?$ ./main/ [L,NC] 。如果这是你想要的,一切都很好。如果没有,则应删除404.php!-f条件并添加条件以排除!-d被重写为main

404

即使替换RewriteCond %{REQUEST_URI} !/main/ [NC] 有效,我也会将其写为

./404.php