我有一个建立在codeigniter上的网站,但我遇到了一个小问题。基本上可以通过3个不同的网址访问主页:
www.domain.com/en
www.domain.com/en /
www.domain.com/en/home.html
我希望第一个和第三个网址重定向到第二个网址(www.domain.com/en /)。
我一直在玩.htaccess几个小时,我似乎无法做任何改变。
任何帮助都会非常感激。
修改 这是我目前的.htaccess
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
RewriteCond %{HTTP_HOST} ^mywebsite.com [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [L,R=301]
RewriteRule ^en(/home.html)?$ /en/ [L]
答案 0 :(得分:2)
RewriteRule ^en(/home.html)?$ /en/ [L]
这只匹配/ en和/en/home.html,没有其他网址。
答案 1 :(得分:1)
您当前的解决方案无效,因为RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
The L
flag denotes last, meaning that no further rules should be processed.
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
#Everything from here has to do with the line mentioned above
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L] # This catches all input
RewriteCond %{HTTP_HOST} ^mywebsite.com [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [L,R=301]
RewriteRule ^en(/home.html)?$ /en/ [L]
相反,您想要处理的任何内容都需要在该行之前向上移动:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^mywebsite.com [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [L,R=301]
RewriteRule ^en(/home.html)?$ /en/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
除此之外,阅读mod_rewrite和regular expressions不能在这里受伤。
答案 2 :(得分:0)
可以像更改
一样简单 ^en(/home.html)?$ /en/ [L]
到
^/en(/home.html)?$ /en/ [L]
(注意额外的斜线)