0

我有以下 .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>

当我的 url 格式类似于:

mysite.com/project/1/test/vw

一切正常。但我也想在以其他格式输入 url 时,将其重写为第一种格式。即当我像这样输入网址时:

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

我希望它变成:

mysite.com/project/1/test/vw

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

4

2 回答 2

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>
于 2013-08-15T20:39:55.647 回答
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]
于 2013-08-15T20:24:10.807 回答