【问题标题】:htaccess rewrite for yearly websitehtaccess 重写年度网站
【发布时间】:2012-10-31 05:52:13
【问题描述】:

我已经寻找了很多答案,但没有令人满意的答案,我现在带着我的问题来了:

我正在为音乐节创建一个网站,该网站每年都会更新。我想保留古人的版本。所以我有以下结构:

/
2011
2012
2013
.htaccess

每年的网址几乎都相同。我想让实际的网站(现在是 2013 年)直接在根目录下访问。例如:

aaa.com/festival/presentation -> aaa.com/2013/festival/presentation
aaa.com/programme/groupes     -> aaa.com/2013/programme/groupes

用户不应该在 url 中看到 2013/,而是像在栏中输入一样访问页面。

我已经尝试了一些解决方案,例如

RewriteEngine on
RewriteRule ^(.*)$ 2013/$1

但它不起作用:页面没有呈现,就好像我在 url 中输入了 2013/ 一样(我使用 CakePHP,它告诉我,控制器丢失了;它会寻找一个名为 ordner 的控制器我的整个网站都是)。

什么是我需要的好的解决方案?

条件:

另一件事是我想提出条件,在某些情况下,它不应该重写 url,实际上是访问旧网站 2012、2011 等:

aaa.com/2012/presentation does not -> aaa.com/2013/2012/presentation

如果你能帮助我,那就太棒了!!!!

【问题讨论】:

    标签: .htaccess cakephp web rewrite


    【解决方案1】:

    试试这样的:

    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}/2013%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/2013%{REQUEST_URI} -d
    RewriteRule ^ /2013%{REQUEST_URI} [L]
    

    或者可以使用%{TIME_YEAR} 变量自动完成,但它可能适合您的需求:

    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}/%{TIME_YEAR}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/%{TIME_YEAR}%{REQUEST_URI} -d
    RewriteRule ^ /%{TIME_YEAR}%{REQUEST_URI} [L]
    

    这实质上添加了一个条件,即请求的 URI必须在被重写之前作为文件或目录存在于 2013 目录中。

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 2016-10-13
      • 2014-01-07
      • 2012-12-09
      • 2015-02-03
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多