首先,我是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页面非常有用。

09-27 05:02