淘客熙熙

主题:【求助】apache中 .htaccess的 url_rewrite的使用 -- 铁手

共:💬9 新:
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【求助】apache中 .htaccess的 url_rewrite的使用

    目前西西河已经使用类似 http://www.cchere.com/article/433305

    的方式,来方便搜索引擎,同时也是容易看。

    目前的一个问题是,以前有很多贴在搜索引擎上有,如果能更新一下的话,很多工作不必从头开始。

    现在想做的是,能够把以前诸如

    / article/433305

    redirect 301 到

    http://www.cchere.com/article/433305

    怎么样弄 rewrite rule 才行?


    本帖一共被 1 帖 引用 (帖内工具实现)
    • 家园 R=301

      RewriteRule ... [R=301,L] #发出一个外部重定向命令,L表示后面的语句就不管了,Last。

      现在这个 http://cchere.net/thread/433325 到RA2.php?...这个转换是内部的,不一样的。

      • R=301
        家园 忘了说一个满重要的

        当在目录级用htaccess操作时。可能需要用RewriteCond定义重写发生的条件,否则可能陷入死循环。

        原因是:

        A 新URL->内部重定向到老URL

        B 老URL->外部重定向到新URL

        因为最后Apache都得去面对老URL,若不定义条件,它就可能去做B操作,那就是死循环了。

        有一个环境变量好象是Requst_URI,记录的是最初客户端请求的URL,大约应该是用这个做判断来确定B操作发生的条件,以避免对内部已经重写的URL再应用B操作。

        • 家园 补充:的确出现过死循环。如 RA2.php 换成 RA3.php文件名

          是不是可以避免死循环的问题?

          也就是说,在 rewrite rule里是

          /RA2.php?AID=xxx 定向到 /article/xxx [R=301]

          /article/xxx 定向到 RA3.php?AID=xxx [L]

          这样,是不是可以解决问题?

          • 家园 肯定可行

            不过那个[L]的使用可能您有一些误解。

            [L]指的是本次htaccess执行的时候,执行了这句就不用管后面的语句了,退出本次htaccess执行。

            但实际上htaccess是会被多次执行的。每次重新生成URL后,新URL被注入Apache核心,然后一级一级解释下去,到达这个目录的时候,htaccess又会被重新执行。

            所以避免死循环的关键是重写后的URL在第2次被分析的时候,就不满足RewriteRule了。[L]是没有用的。

        • 家园 感觉有些太复杂。

          我后来想想,不如索性把原来的RA2换个名字,用REWRITE到那里,然后在RA2里面放一个301 REDIRECT。这样可能比较容易一些。

          改那个HTACCESS。把西西河搞死过几次:)

    • 家园 关于 .htaccess

      如果能够更改http.conf,就不要用.htaccess

      .htaccess是 per directory, overhead比较高

    • 家园 俺没用过,试试看

      外链出处

      外链出处

      Under “Canonical URLs”

      RewriteRule /cbbs/Ps/RA2.php\?AID=(\d+) /article/$1 [R]

      似乎也可以用

      RedirectMatch /cbbs/Ps/RA2.php\?AID=(\d+) /article/$1

      没太看明白两者的区别,似乎是RedirectMatch用来Redirect,RewriteRule是内部工作,外界见到的URL不变。

      俺的RE是用perl试的

      perl -e '$a = "/article/433305;; $a =~ s@/cbbs/Ps/RA2.php\?AID=(\d+)@/article/$1@o; print "$a\n";'

      不知能否帮得上忙

分页树展主题 · 全看首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河