我创建了以下.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 :(得分: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