我是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?
答案 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]