htaccess URL重写 - 在服务器上找不到请求的URL

时间:2012-01-07 00:28:38

标签: php .htaccess url-rewriting

存在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. 

我希望有所帮助!

3 个答案:

答案 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文件被访问(或者它们不存在)?