为什么我的.htaccess没有从子文件夹中正确重定向?

时间:2014-08-08 16:22:59

标签: php apache .htaccess mod-rewrite

我创建了一个.htaccess文件来从域中删除www前缀,并通过引导程序发送所有请求(index.php。)这里是:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
</IfModule>

我的问题是,如果网站包含在子文件夹中,重定向会将用户发送到根文件夹,并且重定向会中断。

示例:用户访问&#34; www.example.com/website/news" - &GT;重定向到&#34; example.com/news" (应该是&#34; example.com/website/news")

任何人都有任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

测试此规则

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subfolder/index.php?url=$1 [L,QSA]
</IfModule>

答案 1 :(得分:0)

您可以使用REQUEST_URI变量代替$1来解决此问题:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L,NE]

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
</IfModule>