【发布时间】: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,我得到一个如下所示的重定向链:
- http://www.foo.com/work/123 302 重定向到
- http://www.foo.com/work 301 重定向到
- http://www.foo.com/work/ 返回 200
如果您从 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/123 到 foo.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