.htaccess从rewriterule创建重定向规则

时间:2014-10-09 21:25:20

标签: php apache .htaccess mod-rewrite redirect

我用自己的解决方案替换旧的开源解决方案,但是我需要所有旧的链接来处理我的新事物。使用RewriteRule会在图像和链接的相对路径上产生很多问题,而且我们想要推广新的URL。

旧网址: www.website.com/folder1/folder2/number/

新网址: www.anotherwebsite.com/folder1/index2.php?f=show&e=number

其中'数字'是一个' id'我在我的程序中使用。

旧解决方案有这个.htaccess条目,所以如果可能的话我还需要考虑不同的条目格式

<IfModule mod_rewrite.c>

        SetEnv MY_REWRITE 1

        Options +FollowSymlinks -Multiviews
        RewriteEngine on

        RewriteRule ^.*\.(jpg|gif|png|css|js)$ - [L,PT]

        RewriteRule ^([0-9]+)/?$ ?CategoryID=$1 [QSA,L]
        RewriteRule ^([a-zA-Z_]+)(/([0-9]+))?(/([a-zA-Z_]+))?/?$ index.php?View=$1&EntryID=$3&Msg=$5 [QSA,L]
        RewriteRule ^([a-zA-Z_]+)(/([0-9]+))?(/([0-9]+))?(/([a-zA-Z_]+))?/?$ index.php?View=$1&CategoryID=$3&EntryID=$5&Msg=$7 [QSA,L]


</IfModule>

我已经考虑过将所有内容重定向到一个php页面,它只会获取最初请求的url,然后通过重定向发送一个标题信息到新工具,但是我想避免做一个hacky的工作,并重定向一切。 htaccess如果可能的话。

1 个答案:

答案 0 :(得分:1)

您可以将此重定向的新规则用作第一条规则

<IfModule mod_rewrite.c>

   SetEnv MY_REWRITE 1

   Options +FollowSymlinks -MultiViews
   RewriteEngine on

   RewriteCond %{HTTP_HOST} ^(www\.)?website\.com$ [NC]
   RewriteRule ^(folder1)/folder2/([0-9]+)/?$ http://www.anotherwebsite.com/$1/index2.php?f=show&e=$2 [L,NC,R=301,QSA]

   RewriteRule ^.*\.(jpg|gif|png|css|js)$ - [L,PT]
   RewriteRule ^([0-9]+)/?$ ?CategoryID=$1 [QSA,L]

   RewriteRule ^([a-zA-Z_]+)(/([0-9]+))?(/([a-zA-Z_]+))?/?$ index.php?View=$1&EntryID=$3&Msg=$5 [QSA,L]

   RewriteRule ^([a-zA-Z_]+)(/([0-9]+))?(/([0-9]+))?(/([a-zA-Z_]+))?/?$ index.php?View=$1&CategoryID=$3&EntryID=$5&Msg=$7 [QSA,L]

</IfModule>