我在这里再次询问重写URL :(。
我正在使用htaccess进行重写,下面是我的htaccess代码:
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !\.\w+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) /$1/ [R,L]
RewriteCond %{REQUEST_URI} ^/([\w\d-]+)/$ [NC]
RewriteRule ^ /?file_name=%1 [L,QSA]
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} (?:(.*)&)?file_name=([\w\d-]+)(.*) [NC]
RewriteRule ^ %2/?%1%3 [L,R]
在询问我的问题之前,让我简单解释一下代码是如何工作的。我有一个像 http://www.mysite.com/ (用于索引)的网址,其他网页可以使用名为file_name = page_name的参数执行,如 http://www.mysite.com/?file_name=my_blog 即可。我的htaccess正在帮助我排除file_name参数并创建一个新的URL,如 http://www.mysite.com/my_blog/ 。
现在我有一个查询:
- 目前已有参数 file_name ,现在我想提供额外的参数,例如 http://www.mysite.com/?file_name=my_blog&blog_alias=welcome-to - 新一代,希望它看起来像 http://www.mysite.com/my_blog/welcome-to-new-generation/ 。因此,如果我添加任意数量的参数,则应删除参数名称,并且只有参数值带斜杠 请注意:参数名称可以是任何内容。
醇>
请帮助。
答案 0 :(得分:1)
这是一个非常有趣的问题,需要递归实现mod_rewrite规则。将此代码放入.htaccess:
更新II 根据进一步的评论,将/?file_name=my_blog&blog_alias=welcome-to-new-generation&foo=bar&n=v
URI重定向到/file_name+my_blog/blog_alias+welcome-to-new-generation/foo+bar/n+v
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# forwards ?file_name=my_blog&blog_alias=welcome-to-new-generation to
# /file_name=my_blog&blog_alias=welcome-to-new-generation
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+\?([^\s]+)\s [NC]
RewriteRule ^$ %1? [L]
# redirects /file_name=my_blog&blog_alias=welcome-to-new-generation&foo=bar&n=v
# to /file_name+my_blog/blog_alias+welcome-to-new-generation/fo+barn+/v
RewriteRule ^(.*/)?([^=]+)=([^&]+)&(.*)$ $1$2+$3/$4 [L]
RewriteRule ^(.*/)?([^=]+)=(.*)$ $1$2+$3 [L,R]
# internal forward from /file_name+my_blog/blog_alias+welcome-to-new-generation to
# /?file_name=my_blog&blog_alias=welcome-to-new-generation
RewriteRule ^([^\+]+)\+([^/]+)/(.*)$ $3?$1=$2 [L,QSA]
RewriteRule ^([^\+]+)\+([^/]+)/?$ /?$1=$2 [L,QSA]
确定有效后,R
改为R=301