首先,我是PHP和.htaccess的初学者。这是我的困境...
我建立了动态页面,并使用htaccess重写了网址。页面分为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
状态网址存储在数据库中的位置表中(stateSlug = Massachusetts-colleges)。城市网址也存储在数据库的位置表中,相应的州信息也与该城市一起存储(citySlug =波士顿马学院,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语言有些陌生。在此问题上的任何帮助,我将不胜感激。
谢谢!
最佳答案
请尝试以下操作,但将index.php
替换为404页面:
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响应代码即可。我是从http://codeigniter.com/wiki/mod_rewrite/的CodeIgniter Wiki页面上获得的
当我尝试解决类似问题时,他们的Wiki页面非常有用。