如何从www删除index.php到非www .htaccess重定向

时间:2017-05-01 11:07:35

标签: apache .htaccess redirect mod-rewrite

当我去

www.example.co/courses

我被重定向到

https://example.co/index.php/courses

我想重定向到

https://example.co/courses

我尝试了什么

此处是我的.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.co [NC]
RewriteRule ^(.*)$ https://example.co/$1 [L,R=301]
</IfModule>

如何删除重定向网址的/index.php/部分?

1 个答案:

答案 0 :(得分:1)

您的外部重定向位置错误。他们需要在内部重写前(前端控制器之前)。例如:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.twocan\.co [NC]
RewriteRule ^(.*)$ https://twocan.co/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

如果在内部重写后有外部重定向,那么请求会被重写为/index.php/...,然后变成外部重定向(重写过程在.htaccess循环,所以它只会被重写为index.php在第一个循环上。)