用参数重写此URL

时间:2014-06-12 03:49:09

标签: .htaccess mod-rewrite rewrite

我在理解重写规则时遇到了问题。基本上我要做的就是改变这个:

http://domain.com/Intern/guangjian/gallery/?page=admin_login

进入这个:

http://domain.com/Intern/guangjian/gallery/admin_login

当我将各种规则应用于.htaccess文件时,我不断收到500内部服务器错误。请帮忙。目前我有以下内容:

RewriteEngine ON
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/%2

我承认我并不真正理解所有符号的含义。

3 个答案:

答案 0 :(得分:0)

符号使用字符编码

将字符转换为特定集合中的字节序列

实施例

原始网址。 例如。 http://flickr.com/users.php?id=username&page=2

重写友好网址。 例如。 http://flickr.com/username/2

//第一个参数

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ users.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ users.php?user=$1

//第二个参数

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ users.php?user=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&page=$2

答案 1 :(得分:0)

将此代码放在/Intern/guangjian/gallery/.htaccess文件中:

RewriteEngine On
RewriteBase /Intern/guangjian/gallery/

RewriteCond %{THE_REQUEST} /\?page=([^\s&]+) [NC]
RewriteRule ^ %1? [R=302,L]

RewriteRule ^([^/.]+)/?$ ?page=$1 [L,QSA]

答案 2 :(得分:0)

重写规则语法为: RewriteRule Pattern Substitution [flags]

这意味着只有标志(L,NC,R等)是可选的,匹配的模式和替换部分是必需的。但是你只指定了一个,这就是你得到500内部服务器错误的原因。

您不需要RewriteCond。试试这个:

RewriteEngine ON
RewriteRule ^(.*)\?(\w+)=(\w+)$ $1/$3

您正在获取的所有内容,然后将 page 的值或查询字符串的任何参数附加到网址。这当然只有在查询字符串中只有一个参数时才有效,在其他情况下正则表达式不匹配。