在.htaccess文件中进行url-rewrite以双向工作

时间:2013-08-15 20:03:02

标签: .htaccess url-rewriting

我有以下.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3  [L,NC]

</IfModule>

当我的网址格式如下:

mysite.com/project/1/test/vw
一切正常。但我也想在其他格式中键入url时,将其重写为第一种格式。 即当我输入这样的网址时:

mysite.com/project.php?id=1&pName=test&urlParam=vw

我希望它变成:

mysite.com/project/1/test/vw

我必须写另一条规则吗?还是以其他方式完成?

2 个答案:

答案 0 :(得分:0)

当前的重写规则不会处理这两种情况。同时添加以下重写规则。

RewriteEngine On
RewriteBase /mysite/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlParam=$3&no-redir  [L,NC,QSA]

RewriteCond %{QUERY_STRING} !no-redir
RewriteCond %{QUERY_STRING} (^|&)id=([^&]+)&pName=([^&]+)&urlParam=([^&]+)
RewriteRule ^project\.php$ project/%2/%3/%4?  [R=301,L,NC]

答案 1 :(得分:0)

您还需要一个外部重定向规则。使用此代码:

<IfModule mod_rewrite.c>

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} /project\.php\?id=([^&]+)&pName=([^&]+)&urlPram=([^&\s]+) [NC]
RewriteRule ^ project/%1/%2/%3? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^project/([0-9]+)/([a-zA-Z0-9]+)/(.+)?$ project.php?id=$1&pName=$2&urlPram=$3 [L,NC,QSA]

</IfModule>