存在URL重写正在运行但服务器不显示内容的问题。我的.htaccess文件是
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /project\.php [NC]
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule . project-%1.html? [R=301]
感谢您的帮助!
编辑:对不起,这里有更多信息!
我想重写
www.siteurl.co.uk/project.php?id=82
到
www.siteurl.co.uk/project-82.html
.htaccess中的代码会完美地重写URL,但页面不会显示。我得到了
404 The requested URL /project-82.html was not found on this server.
我希望有所帮助!
答案 0 :(得分:1)
您只有解决方案的一半,创建漂亮的网址。缺少的是另一半,将漂亮的URL发送到应用程序进行处理,如下所示
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /project\.php [NC]
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule . project-%1.html? [R=301]
#you need this rule to process your www.siteurl.co.uk/project-82.html request
RewriteRule ^project-([0-9]+)\.html$ project.php?id=$1 [L,NC,QSA]
答案 1 :(得分:0)
尝试添加RewriteRule ^project-%1.html? [R=301]
而不是.
答案 2 :(得分:0)
不知道“[A-Z] {3-9} \”的用途是什么?也许我错过了什么?
但也许是这样的事情:
RewriteCond %{THE_REQUEST} ^project\.php [NC]
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule . project-%1.html? [R=301]
或
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^/project\.php project-%1.html? [R=301]
请注意,这只是我的头脑,我没有测试它。
编辑:刚刚调整了第二个带有额外斜杠的示例,并在我的网络服务器上测试了它(请注意我使用的是IIS / URLRewrite,但应该是相同的):
RewriteBase /
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule ^project\.php project-%1.html? [R=301]
我输入 http://localhost/project.php?id = 123 ,然后转到 http://localhost/project-123.html
但我觉得我错过了什么...... 你说网址重写是有效的,网址正在改变,但你得到的是404?在那种情况下,你的重写听起来很好 - 而其他东西不允许你的html文件被访问(或者它们不存在)?