如何禁用不需要的请求?(MySQL、.htaccess、PHP)

如何禁用不需要的请求?(MySQL、.htaccess、PHP),php,mysql,.htaccess,mod-rewrite,Php,Mysql,.htaccess,Mod Rewrite,首先,我是PHP和.htaccess的初学者。这是我的困境 我构建了动态页面,并使用htaccess重写URL。有3种类型的页面。。。示例: 州:example.com/massachusetts-colleges.html 城市:example.com/massachusetts-colleges/boston-ma-colleges.html 学院:example.com/massachusetts-colleges/boston-ma-colleges/harvard.html 问题是请求

首先,我是PHP和.htaccess的初学者。这是我的困境

我构建了动态页面,并使用htaccess重写URL。有3种类型的页面。。。示例:

州:example.com/massachusetts-colleges.html

城市:example.com/massachusetts-colleges/boston-ma-colleges.html

学院:example.com/massachusetts-colleges/boston-ma-colleges/harvard.html

问题是请求的页面(可能来自旧的链接结构)不应该存在,例如:

example.com/boston-ma-colleges.html

州URL存储在数据库的locations表中(stateSlug=massachusetts colleges)。城市URL也存储在数据库的locations表中,相应的州slug也存储在该城市中(citySlug=波士顿ma学院,stateSlug=马萨诸塞学院)。学院存储在不同的表中,并使用ID与城市相对应

如何使用.htaccess阻止任何“其他”URL被访问(页面显示模板,没有数据),并显示404页面(或重定向到主页)

这就是我的.htaccess文件现在的样子:

RewriteEngine on
RewriteRule ^([^/\.]+)\.html?$ php/statePage.php?stateSlug=$1 [L]
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)\.html?$ php/cityPage.php?citySlug=$2&stateSlug=$1 [L]
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)/([^/\.]+)\.html?$ php/collegePage.php?collegeSlug=$3&citySlug=$2&stateSlug=$1 [L]
同样,我对htaccess和php语言有些陌生。在这件事上,如果有任何帮助,我将不胜感激


谢谢大家!

假设您的所有内容都与上述URL之一匹配,您可以通过在末尾添加另一条规则来禁止访问其他内容:

RewriteRule ^(.*)$ - [F]
为了避免与图像和CSS的请求发生冲突,您应该添加:

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif|js|css)$ [NC]
RewriteRule ^(.*)$ - [F]
如果您有不可访问的目录,请在其中放置.htaccess,其中仅包含以下内容:

Order deny,allow
deny from all

将所有公共文件重写到假目录
/allow/。
,对于不在
/allow/。
目录中的任何请求,显示
404
。最后,将文件从
/allow/。
重写到真实目录


这是一个很好的解决方法,IMO:)比在每个目录中使用
deny all
要好…

尝试以下方法,但用404页面替换
index.php

Order allow,deny
Allow from all
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$l [L]
这应该将所有未找到的文件和目录请求重定向到
index.php
或您选择的脚本文件,例如404页面。只需记住将标题设置为404响应代码

我从CodeIgniter的维基页面上得到了这个


当我试图解决类似的问题时,他们的wiki页面非常有用。

我只是尝试添加您告诉我的内容,这在应该显示的页面上造成了“禁止”…谢谢。。。我最终发现了一些不在htaccess中的东西。。。我使用页面代码检查数据库中的slug,如果没有,则将标题更改为404。