【问题标题】:Rewrite rules for pages that do not exist in the database数据库中不存在的页面的重写规则
【发布时间】:2015-12-13 05:43:14
【问题描述】:

到目前为止,我的 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>"

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

对于第 4 行和第 5 行,我的网站允许通过 WYSIWYG 编辑器创建页面并允许用户访问它。实际的 url 看起来像 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 在当前位置是否正确?

非常感谢你们的帮助!我不擅长 mod_rewrite,所以我会感谢你的帮助!

【问题讨论】:

  • 您的匹配模式^([a-zA-Z0-9-]+)/$ 也将匹配任何hello,因此它将被路由到page.php?slug=hello

标签: apache .htaccess mod-rewrite


【解决方案1】:

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

您应该使用 PHP 来执行此操作。如果没有包含内容,请使用header() 重定向到 404。

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

将此添加到您的 .htaccess:Options -Indexes

我的整个 htaccess 在当前点上看起来正确吗?

看起来不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多