GET-请求中的特定参数:不要进行301重定向

时间:2015-10-13 08:40:20

标签: regex .htaccess mod-rewrite redirect

我将网址末尾包含.html的所有网页的地址替换为不包含.html的地址。

.htaccess(相关部分):

...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
...

例如,而不是这个地址:

http://......net/part0/part1/part2/part3.html

我收到了这个地址:

http://......net/part0/part1/part2/part3

如果GET请求包含一些特定参数,我现在需要不执行重定向(我应该返回代码200),例如:

?param1=value1&param2=value2&param3=value3

即此查询:

http://......net/part0/part1/part2/part3.html?param1=value1&param2=value2&param3=value3

应转换为此查询:

http://......net/part0/part1/part2/part3?param1=value1&param2=value2&param3=value3

我该怎么做?

我将非常感谢这些信息。谢谢大家。

1 个答案:

答案 0 :(得分:1)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On
RewriteBase /

## hide .html extension

# To externally redirect /dir/file.html to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=302,L]

## To internally redirect /dir/file to /dir/file.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]