如何交换“index.php?”通过htaccess mod_rewrite在URL字符串中使用“index.php @”

时间:2012-07-13 05:22:07

标签: .htaccess mod-rewrite

我有原始动态网站的静态副本。原始网站的网址是这样的:

http://www.example.com/index.php?module=prodreviews&func=showcontent&id=728

但是,由于我现在有一个我网站的静态副本,所有网址都有@而不是?和.htm扩展名。

当前网址格式为:http://www.example.com/index.php@module=prodreviews&func=showcontent&id=728.htm

将旧网址结构的任何请求(网址中的“?”和.htm扩展名)重定向到新网址格式的mod_rewrite规则是什么?我基本上希望通过旧链接访问我网站的任何人都会被带到正确的页面,即使URL格式已经改变。

我一直在玩写一些规则,但没有骰子。

这是我到目前为止所做的,但这只会在任何网址上自动添加.htm扩展名。我仍然需要替换任何有“?”的URL请求在“php”之后加上“@”:

Options +FollowSymlinks Options +Indexes RewriteEngine On RewriteBase /
# add .html file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.htm -f 
RewriteRule ^(.+)$ $1.htm [L]

1 个答案:

答案 0 :(得分:0)

您需要将查询字符串包含在重写规则的目标中:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}@%{QUERY_STRING}\.htm -f
RewriteCond %{QUERY_STRING} ^(.*)$  
RewriteRule ^(.*)$ /$1@%1.htm? [L]