2013-03-05 50 views
0

我有一个主站点上运行ExpressionEngine,我试图让一个名为“工作”的子文件夹运行YOURLS,即:http://foo.com/work/的短网址和EE运行在根,即:http://foo.com/ 。请注意,没有'www'。与ExpressionEngine的.htaccess问题,YOURLS

我遇到的问题是,当我用简短的网址和用户添加“WWW”的URI,如http://www.foo.com/work/123我得到的是这样的一个重定向链:

一切正常www'来自URI。 YOURLS被设置为使用非www,但担心的是一些用户可能习惯性地输入'www',因为这些URI被放置在印刷广告上。

根.htaccess文件看起来是这样的:

SetOutputFilter DEFLATE 
DirectoryIndex index.php index.html 

# BEGIN ExpressionEngine Rewrite 
<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteBase/
RewriteCond %{HTTP_HOST} ^www.foo.com [NC] 
RewriteRule ^(.*)$ http://foo.com/$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteRule ^(.*)$ /index.php?$1 [NC,L] 
</IfModule> 
# END ExpressionEngine Rewrite 

的/工作/(YOURLS)的.htaccess看起来是这样的:

# BEGIN YOURLS 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /work/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /work/yourls-loader.php [L] 
</IfModule> 
# END YOURLS 

我怎样才能获得的 'www' URI来像非www的URI一样工作,没有完全放弃EE? :)

+1

试图在同一添加2线RewriteBase后'...'根的.htaccess,到'/ work'的.htaccess位置。 (在'RewriteBase..'之后)。 – 2013-03-05 15:47:39

+0

我按照你的说法编辑和添加了这些行,现在它的确重定向了301,但是从http://foo.com/work/123 |我添加的行是RewriteCond%{HTTP_HOST}^www.foo.com $ [NC] RewriteRule ^(。*)$ http:// foo。com/work/$ 1 [L,R = 301] – Marty 2013-03-05 16:04:29

+1

评论中的最后重写规则是不同的('RewriteRule ^(。*)$ foo.com/work/$ 1')。应该完全一样:'RewriteRule ^(。*)$ http://foo.com/$1 [L,R = 301]'。 – 2013-03-05 16:07:12

回答

0

尝试在根目录的.htaccess RewriteBase...后加入2号线,到/work的.htaccess,像这样:

# BEGIN YOURLS 
<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www.foo.com [NC] 
RewriteRule ^(.*)$ http://foo.com/$1 [L,R=301] 

RewriteBase /work/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /work/yourls-loader.php [L] 
</IfModule> 
# END YOURLS 
0

我遇到了类似的问题。一些最终用户或发布短网址的用户倾向于使用www附加它们,而短网址是为了在没有www的情况下使用而购买的。

我还安装了YOURLS redirect index plugin将主页访问者转发到我们的常规主页。

所以我有几个不同类型的网址:

  1. 简短的域名的主页,应该引起普通HTTPS网页
  2. 简短的域名YOURLS管理面板,应该引起HTTPS管理面板
  3. 短域名缩短的网址,应导致长URL

我希望所有的URL都可以使用或不使用www,并确保http被转发到https。

我的解决办法是开始的.htaccess这些行:

# Force HTTPS (because of passwords via /admin) and use clean domain (non www) 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www.examp.le [NC] 
RewriteRule ^(.*)$ https://examp.le/$1 [L,R=301]