如何使用mod_rewrite从我的URL中删除查询字符串?

时间:2012-02-01 21:33:42

标签: php mod-rewrite

我是mod_rewrite的新手,如果可能的话需要一些帮助。

这是我的旧网址

www.mysite.com/web/page.php?c=categoryname

我需要在以下地址进行更改:

www.mysite.com/web/page/categoryname.html

我正在使用此代码,但它不起作用:

    RewriteEngine on
    RewriteBase /web/  
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^/([^/]+)/?$ page.php?c=$1 [L]

如何修复上述代码以正确重写我的网址? 编辑:

感谢Ulrich Palha 我设法重定向html文件,但css,js等不重定向,网站看起来很糟糕,这是我现在使用的代码,直到我将得到一个将重定向css的人

 RewriteEngine On
    RewriteBase /web/

    #redirect www.mysite.com/web/page.php?c=categoryname to
    #www.mysite.com/web/page/categoryname.html
    #prevent internal redirect
    RewriteCond %{ENV:REDIRECT_STATUS} !200
    RewriteCond %{QUERY_STRING} (^|&)c=([^&]+)(&|$) [NC] 
    RewriteRule ^(page)\.php$ $1/%2.html? [NC,L,R=301]

    #rewrite www.mysite.com/web/page/categoryname.html to
    #www.mysite.com/web/page.php?c=categoryname 
    RewriteRule ^(page)/([-a-zA-Z0-9]+)\.html$ $1.php?c=$2 [L,NC]

BUMP ANY HELP PLEASE?

2 个答案:

答案 0 :(得分:1)

规则中的正则表达式错误 - 您遗漏了/page,添加了一个您不应该选择的可选最终斜杠,并忘记删除.html部分。另外,您的RewriteBase不应该有最终的斜杠,而且您的规则也不应该有正斜杠。

总而言之,应该是这样的:

RewriteEngine on
RewriteBase /web  
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^page/([^/]+)\.html$ page.php?c=$1 [L]

答案 1 :(得分:1)

将以下内容添加到您网站的网络目录中的.htaccess文件中,替换上面的规则。

RewriteEngine On
RewriteBase /web/

#do not process css/js etc
RewriteCond %{REQUEST_URI} \.(css|js|jpg|png) [NC] 
#alternatively you could skip all existing files. Comment previous line and uncomment next to do so
#RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

#redirect www.mysite.com/web/page.php?c=categoryname to
#www.mysite.com/web/page/categoryname.html
#prevent internal redirect
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{QUERY_STRING} (^|&)c=([^&]+)(&|$) [NC] 
RewriteRule ^(page)\.php$ $1/%2.html? [NC,L,R=301]

#rewrite www.mysite.com/web/page/categoryname.html to
#www.mysite.com/web/page.php?c=categoryname 
RewriteRule ^(page)/([-a-zA-Z0-9]+)\.html$ $1.php?c=$2 [L,NC]