“rewrite” 标签页面:

  • StatusNet在Nginx下的rewrite规则

    StatusNet在Nginx下的rewrite规则。假设StatusNet装在abc.creke.net的sn目录下,访问地址为abc.creke.net/sn/,则其在Nginx下的rewrite规则如下:

    #StatusNet
    location /sn
    {
            try_files $uri $uri/ @statusnet;
    }
    location @statusnet
    {
            rewrite ^/sn/(.*)$ /sn/index.php?p=$1 last;
    }

    将其放在“server{}”块中靠前位置即可。

    如果不启用fancy url,这时会发现登录页面404,因为类似“abc.creke.net/sn/index.php/main/login”这类地址nginx不认为是需要交到php处理的地址。这时有两种解决方法。

    第一种,最简单的就是在config.php中加上开启fancy url的语句,同时按照上面说的配好rewrite:

    $config['site']['fancy'] = true;

    第二种,就是将上面的rewrite中的rewrite规则换成:

    rewrite ^/sn/index\.php\(.*)$ /sn/index.php?p=$1 last;

    好吧,除了我,谁那么无聊用第二种啊……用第一种呗。

    2011.08.16 / 暂无评论 / 778 次点击 / 分类: 所谓技术

  • Blogger转移到WordPress的rewrite跳转规则

    Blogger转移到Wordpress的.htaccess的rewrite跳转规则。

    这是很久之前写的,一直没有整理出来。刚好今天博客搬家,整理一下发上来。

    这份代码可以吧blogger的相同月份的文章转移到wordpress对应的月份归档里,当然,无论如何是不能从blogger的具体文章跳转到wordpress的对应文章的,这是是最精确、最有利于SEO的做法。

    以下是.htaccess的rewrite代码:

    #BEGIN old blog
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      #post
      RewriteRule ^([0-9]{4})/([0-9]{2})/[A-Za-z0-9_-]+\.html$ /date/$1/$2 [R=301,L]
      #archive
      RewriteRule ^([0-9]{4})_([0-9]{2})_01_archive\.html$ /date/$1/$2 [R=301,L]
    </IfModule>
    #END old blog

    2010.12.12 / 2 条评论 / 865 次点击 / 分类: 所谓技术

  • StatusNet在IIS下的Rewrite规则

    StatusNet在IIS下的Rewrite规则,其实跟WordPress的大致相同,大家也可以在IIS下转换.htaccess。不过这个StatusNet在IIS下有个问题,就是不能使用API。

    Rewrite规则如下:

    <configuration>   
      <system.webServer>   
        <rewrite>   
          <rules>  
            <rule name="StatusNet" patternSyntax="Wildcard">   
              <match url="*" />   
                <conditions>   
                  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />   
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />   
                </conditions>   
              <action type="Rewrite" url="index.php?p={R:1}" />   
            </rule>        
          </rules>   
        </rewrite>   
      </system.webServer>   
    </configuration>

    2010.06.05 / 暂无评论 / 598 次点击 / 分类: 所谓技术

  • Dabr在IIS7下的rewrite规则

    Dabr在IIS7的rewrite规则如下:

    <configuration>   
      <system.webServer>   
        <rewrite>   
          <rules>  
            <rule name="Dabr">   
              <match url="Dabr目录/(.*)" />   
                <conditions>   
                  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />   
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />   
                </conditions>   
              <action type="Rewrite" url="Dabr目录/index.php?q={R:1}" />   
            </rule>       
          </rules>   
        </rewrite>   
      </system.webServer>   
    </configuration>

    上面的“Dabr目录”请按需更改。如果装在根目录,则把“Dabr目录/”,包括后面的“/”也去掉即可。

    把上面内容保存为web.config保存至网站根目录即可。

    2010.05.14 / 暂无评论 / 623 次点击 / 分类: 所谓技术

  • IIS7依靠域名判断重定向的Rewrite规则

    IIS7依靠域名判断重定向的Rewrite规则

    下面贴一下Rewrite规则,作用是把所有非“blog.creke.net”的内容都301重定向到“blog.creke.net”:

    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="Redirect Domain" stopProcessing="true">
              <match url="(.*)" />
              <conditions>
                <add input="{HTTP_HOST}" pattern="^blog\.creke\.net$" negate="true"/>
              </conditions>
              <action type="Redirect" url="http://blog.creke.net/{R:0}" redirectType="Permanent"/>
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>

    其实和.htaccess差不多,只不过IIS的配置是xml语法。

    2010.05.13 / 暂无评论 / 1,018 次点击 / 分类: 所谓技术

  • 使用.htaccess判断蜘蛛及对域名进行重定向

    写了一段代码,首先判断是不是当前所用域名,然后判断是否是蜘蛛,如果两者同时成立,则转到统一的域名下。这个转向主要通过Rewrite来实现,说实话,ReWrite的功能很强大。

    .htaccess代码如下:

    #BEGIN Redirect all the URL to the specific domain fot bots
    <IfModule mod_rewrite.c> 
        RewriteEngine On
        RewriteBase /
        RewriteCond %{HTTP_HOST} !^blog.creke.net [NC]
        RewriteCond %{HTTP_USER_AGENT} (baiduspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot) [NC]
        RewriteRule ^(.*)$ http://blog.creke.net/$1 [R=301,L]
    </IfModule>
    #END

    第一个RewriteCond的意思是,如果当前域名不是blog.creke.net,[NC]即不分大小写;第二个RewriteCond的意思是,通过判断Useragent来检测当前请求网页的是不是网络蜘蛛,用“|”代表或逻辑来匹配列表中每一个蜘蛛的Useragent的关键字,如果匹配,则当前请求者为网络蜘蛛。如果两个重写条件同时成立,则301重定向到当前域名的对应网页。

    2009.11.04 / 4 条评论 / 2,503 次点击 / 分类: 所谓技术

  • WordPress与Discuz的Rewrite共存(方法二)

    WP装在/blog文件夹,DZ装在/bbs文件夹。重写成功。
    这是规则,放在站点根目录下.htaccess即可。
    #这是正确的 wordpress+discuz 共生.htaccess
    <IfModule mod_rewrite.c>
    RewriteEngine On
    #即使DZ装在/bbs目录,还是这么写RewriteBase:
    RewriteBase /
    RewriteRule ^bbs/archiver/((fid|tid)-[\w\-]+\.html)$ bbs/archiver/index.php?$1
    RewriteRule ^bbs/forum-([0-9]+)-([0-9]+)\.html$ bbs/forumdisplay.php?fid=$1&page=$2
    RewriteRule ^bbs/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ bbs/viewthread.php?tid=$1&extra=page\%3D$3&page=$2
    RewriteRule ^bbs/space-(username|uid)-(.+)\.html$ bbs/space.php?$1=$2
    RewriteRule ^bbs/tag-(.+)\.html$ bbs/tag.php?name=$1
    </IfModule>
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    #下面如果是WP装在根目录就是RewriteRule . /index.php [L]
    RewriteRule . /blog/index.php [L]
    </IfModule>
    # END WordPress
    这个方法可行,但还是推荐这种方法:http://blog.creke.net/2009/08/wordpressdiscuzrewrite.html。因为它更便于管理

    2009.08.08 / 6 条评论 / 11,447 次点击 / 分类: 所谓技术

  • wordpress与discuz的Rewrite共存

    自从使用了CPH的LAMP服务器之后,我就开始在上面试验一些php+mysql应用,其中首先弄的就是discuz了。

    安装了discuz6.0.0之后,基本上运行正常,但是一个最重要的功能urlrewrite一直搞不定,直到今天在本地弄xampp才无意之中发现了问题所在。

    和wordpress不一样,当你在discuz后台选择使用url静态化之后,并不会自动生成相应的.htaccess文件,而是指导你"相应规则请参考《用户使用说明书》的高级使用部分"。
    google一下知道这个Discuz! 用户使用说明书,然后找到高级应用里面的url静态化:http://www.discuz.net/usersguide/advanced_urlrewrite.htm

    按照discuz所说的,对于Apache Web Server(虚拟主机用户),应该进行如下操作:

    检查论坛所在目录中是否存在 .htaccess 文件,如果不存在,请手工建立此文件。Win32 系统下,无法直接建立 .htaccess 文件,您可以从其他系统中拷贝一份,或者在 Discuz.net 技术支持栏目中下载此文件。编辑并修改 .htaccess 文件,添加以下内容

    # 将 RewriteEngine 模式打开
    RewriteEngine On
    # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
    RewriteBase /discuz
    # Rewrite 系统规则请勿修改
    RewriteRule ^archiver/((fid|tid)-[w-]+.html)$ archiver/index.php?$1
    RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
    RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
    RewriteRule ^space-(username|uid)-(.+).html$ space.php?$1=$2
    RewriteRule ^tag-(.+).html$ tag.php?name=$1

    添加内容时,请遵照上面的提示,修改论坛所在的路径,然后保存。将 .htaccess 文件上传到论坛所在的目录中。然后进入论坛系统设置的搜索引擎优化,根据需要开启 URL 静态化功能。

    我这样做了之后不但没有效果,而且连论坛都访问不了,提示HTTP500错误。

    今天在本地安装了xampp之后,装了discuz,重新按照上面的方法测试,还是不行,然后又安装了wordpress并成功使用了urlrewrite。
    打开wordpress自动生成的.htaccess文件和discuz的来比较,终于看出来问题:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wordpress/index.php [L]
    </IfModule>
    # END WordPress

    很明显,discuz官方的资料少了两行:
    <IfModule mod_rewrite.c>
    </IfModule>

    按照wordpress的加上去,在本地和CPH服务器上都成功了。
    我对.htaccess文件不是很懂,完全是自己尝试出来的,补充几点:
    首先是<IfModule mod_rewrite.c></IfModule>不能少,这大概是判断mod_rewrite是否存在的。
    其次是RewriteEngine On这个应该是Rewrite引擎打开,也不能少。
    然后是RewriteBase /这个很重要,如果安装在根目录就保持这样,如果不是,就要把/替换成所在的目录,相对于web根目录。
    例如你把discuz安装在http://127.0.0.1/bbs,那么就要写成RewriteBase /bbs/才可以,这样也方便了多个rewrite共存。
    最后是.htaccess文件的位置,如果你的根目录下有bbs和wordpress两个目录对应http://127.0.0.1/bbshttp://127.0.0.1/wordpress,那么可以分别创建两个.htaccess文件放在这两个目录里。
    例如我是这样的:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wordpress/index.php [L]
    </IfModule>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /bbs/
    RewriteRule ^archiver/((fid|tid)-[w-]+.html)$ archiver/index.php?$1
    RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
    RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ viewthread.php?tid=$1&extra=page%3D$3&page=$2
    RewriteRule ^space-(username|uid)-(.+).html$ space.php?$1=$2
    RewriteRule ^tag-(.+).html$ tag.php?name=$1
    </IfModule>

    注意加粗部分哦。

    2009.08.08 / 暂无评论 / 1,161 次点击 / 分类: 所谓技术

  • Apache服务器支持.htaccess和rewrite和virtualhost

    Apache服务器支持.htaccess和rewrite和virtualhost
     
    最近想升级维护Creke ACG,但是以前自己配置的AMP有些功能不支持,所以要自己动手让他支持。

    支持.htaccess
      如何让自己的本地APACHE服务器支持".htaccess"呢?其实只要简单修改一下apache的httpd.conf设置

    就可以让APACHE支持.htaccess了,来看看操作

      打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找

    <Directory />
      Options FollowSymLinks
      AllowOverride None
    </Directory>

      改为

    <Directory />
      Options FollowSymLinks
      AllowOverride All
    </Directory>

      就可以了

    支持rewrite:
    LoadModule rewrite_module modules/mod_rewrite.so

    支持virtualhost:
    在文件末尾加上
    include "conf/vhost.conf"
    然后在httpd.conf新建一个vhost.conf文件。在该配置文件写上虚拟主机的配置就行。
    #NameVirtualHost *:80
    #
    # NOTE: NameVirtualHost cannot be used without a port specifier
    # (e.g. :80) if mod_ssl is being used, due to the nature of the
    # SSL protocol.
    #

    #
    # VirtualHost example:
    # Almost any Apache directive may go into a VirtualHost container.
    # The first VirtualHost section is used for requests without a known
    # server name.
    #
    #<VirtualHost *:80>
    #    ServerAdmin webmaster@dummy-host.example.com
    #    DocumentRoot /www/docs/dummy-host.example.com
    #    ServerName dummy-host.example.com
    #    ErrorLog logs/dummy-host.example.com-error_log
    #    CustomLog logs/dummy-host.example.com-access_log common
    #/VirtualHost>
    比如我,就是:

    NameVirtualHost *

    <VirtualHost *> #默认情况
        DocumentRoot "w:/www"
    </VirtualHost>

    <VirtualHost *> #Creke ACG站点
        DocumentRoot "w:/www/creke_acg"
        ServerName acg.creke.net
    </VirtualHost>

    虽然说的是“NOTE: NameVirtualHost cannot be used without a port specifier”,但我仍然这样子配

    置成功没有报错,也没有警告。而且可以继续使用80和21500两个端口来访问网站。看来有空要研究一下

    http://httpd.apache.org/docs/2.2/vhosts/,看看是否新版本中有和旧版本不同的说明了。

    这样,再把本地的host文件暂时添加acg.creke.net为127.0.0.1,就可以在本地调试升级Creke ACG了。

    2009.06.18 / 暂无评论 / 2,637 次点击 / 分类: 所谓技术