重写数据库中不存在的页面的规则

时间:2015-09-16 14:48:40

标签: apache .htaccess mod-rewrite

截至目前,我的htaccess看起来像这样

RewriteEngine On
RewriteCond %{QUERY_STRING} ArticleID=([^&]+) 
RewriteRule ^article.cfm$ /articles.php?id=%1 [R=301,L]

RewriteRule ^([a-zA-Z0-9-]+)$ page.php?slug=$1
RewriteRule ^([a-zA-Z0-9-]+)/$ page.php?slug=$1

ErrorDocument 404 "<H1>Page not found</H1>"

前三行允许我将通过.cfm访问文章的用户重定向到.php

对于第4行和第5行,我的网站允许通过WYSIWYG编辑器创建页面,并允许用户访问它。实际网址看起来像www.website.com/page.php?slug=homepage但在重写规则之后,它看起来像www.website.com/homepage

然而,我遇到的问题是我的管理页面如www.website.com/admin/被视为页面之一,所以我添加了以下代码并且可以正常工作

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

但我还有几个问题。

  1. 如果您访问无效页面,例如www.website.com/hello/,当用户根本没有创建此类页面时,它仍会显示page.php,但内容为空,我该如何操作将其重定向到404页面?

  2. 如何保护没有index.php页面的目录?比如我的图片文件夹,包括文件夹,javascript文件夹等?

  3. 我现在的整个htaccess是否正确?

  4. 非常感谢你们的帮助!我对mod_rewrite并不擅长,所以我将非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

  

如果您访问无效页面,例如www.website.com/hello/   根本没有用户创建的这样的页面,它仍然会显示   page.php但内容空白,如何将其重定向到404页面?

你应该用PHP做到这一点。如果未包含任何内容,请使用header()重定向到404。

  

如何保护没有index.php页面的目录?   比如我的图片文件夹,包括文件夹,javascript文件夹等?

将此添加到.htaccess:Options -Indexes

  

我目前的整个htaccess是否正确?

看起来很好。