【问题标题】:.htaccess issue with ExpressionEngine and YOURLSExpressionEngine 和 YOURLS 的 .htaccess 问题
【发布时间】:2013-02-20 01:44:54
【问题描述】:

我有一个运行 ExpressionEngine 的主站点,我试图让 YOURLS 在名为“work”的子文件夹中运行,即:http://foo.com/work/ 用于短 url,EE 在根目录下运行,即:http://foo.com/。请注意没有“www”。

我遇到的问题是,当我使用短 URL 并且用户将“www”添加到 URI 时,例如 http://www.foo.com/work/123,我得到一个如下所示的重定向链:

如果您从 URI 中省略“www”,一切正常。 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

/work/ (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

如何在不完全占用 EE 的情况下让“www”URI 像非 www URI 一样工作? :)

【问题讨论】:

  • 尝试将根 .htaccess 中 RewriteBase... 之后的 2 行添加到同一位置的 /work .htaccess 中。 (在RewriteBase.. 之后)。
  • 我按照你说的编辑并添加了这些行,现在它做了 301 重定向,但是从 foo.com/work/123foo.com/123 |我添加的行是 RewriteCond %{HTTP_HOST} ^www.foo.com$ [NC] RewriteRule ^(.*)$ foo.com/work/$1 [L,R=301]
  • 您评论中的最后一个重写规则不同 (RewriteRule ^(.*)$ foo.com/work/$1)。应该完全相同:RewriteRule ^(.*)$ http://foo.com/$1 [L,R=301].
  • 如果仍然无法按预期工作,请尝试将 2 行放在 RewriteBase 指令之前。
  • 成功了,谢谢!把它作为答案留在下面,我会给你信用。

标签: regex .htaccess expressionengine yourls


【解决方案1】:

我遇到了类似的问题。一些最终用户或发布短网址的人倾向于在短网址后面附加 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]

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多