0

冲突我一直在努力用我的mod_rewrite了一段时间,我想我破解了......mod_rewrite的友好的URL与404

我CMS生成与post.php中的博客帖子的网址?S =我”我一直试图删除这部分网址,以便它们很好用户友好。这里是我的mod_rewrite:

<ifModule mod_rewrite.c> 

DirectoryIndex index.php index.html 

ErrorDocument 404 http://tempertemper.net/error.php 

RewriteEngine On 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

RewriteCond %{HTTP_HOST} ^www.tempertemper\.net$ 
RewriteCond %{REQUEST_URI} !cron.php 
RewriteRule ^(.*)$ http://tempertemper.net/$1 [R=301,L] 

RewriteCond %{QUERY_STRING} ^s=(.+)$ 
RewriteRule post.php /%1? [R=301,L] 

RewriteRule ^resources /archive? [R=301,L] 

RewriteCond %{REQUEST_URI} !post.php 
RewriteRule ^([a-zA-Z0-9_-]+)$ post.php?s=$1 

</ifModule> 

不幸的是,这似乎是指引未发现空白post.php中网页,而不是error.php页面的所有页面。

我的网站是在这里:http://tempertemper.net,这里是不存在的http://tempertemper.net/this-url-does-not-exist

应该带你到http://tempertemper.net/error

感谢您抽空看看:)

+0

什么是没有找到的页面的例子? '/post.php?S = blahblah'? –

+0

嗨@Jon,CMS生成example.com/post.php?s=blahblah,我正在将它改写为example.com/blahblah – Martin

+0

但是它如何知道'blahblah'没有找到? –

回答

0

因为要重定向所有的URL适合[a-zA-Z0-9_-]+模式的路径,这将简单地发送到您的post.php脚本查询字符串s=this-url-does-not-exist。所以这取决于你的PHP脚本post.php来检查this-is-not-a-url是否存在,因为Apache不可能知道哪些博客帖子ID值是有效的,哪些不是。

作为一个附注,我建议使用/blog/2012-08-24-whatever作为你给游客的路径,而不是/2012-08-24-whatever。这样,您可以为其他功能(例如/images)预留路径,而无需在每次需要创建新实用程序路径时在.htaccess文件中写入新的异常。

+0

按照建议,我已将博客移动到其自己的文件夹中。谢谢。那么所有不是现有网页的东西都会被重定向?我想用它自己的.htaccess将博客移动到它自己的文件夹允许404在网站的其他部分工作。但我想最好是以某种方式为博客重写mod_rewrite。我有点失落......你如何从URL中删除post.php?s =?我所追求的是所有博客文章的一种生成方式,可以从example.com/blog/post.php?s=nice-post重定向到example.com/blog/nice-post。感谢您的帮助@ user1515834 :) – Martin

+0

而这就是您所看到的。但是,由于用户可以提供完全符合该模式的/博客/名称,但是指的是不存在的文章,您需要修改您的PHP脚本以检查名称是否实际存在,如果不是,请告诉PHP脚本发出一个404头和一条消息,向用户解释他们已经请求了一篇不存在的文章。 Apache无法知道哪些博客文章是由PHP从数据库中提取的。 – Bobulous

+0

Gotcha。对不起,如果我的摄取速度有点慢 - mod_rewrites不是我的特长!感谢您的帮助:) – Martin