NoT发现url显示index.php的内容

时间:2013-08-29 08:11:25

标签: apache .htaccess mod-rewrite

您好我需要显示所有未找到网址的index.php内容, 例如

http://domain.com/random must show http://domain.com/index.php content
http://domain.com/random/random.html must show http://domain.com/index.php content
http://domain.com/random/rand/random.php must show http://domain.com/index.php content

我尝试了以下代码,但仍然没有找到错误

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/(.*?)/?$ /$1/index.php [L]

1 个答案:

答案 0 :(得分:1)

这里的问题是,您使用$1在重写的URL中包含部分请求的路径,这有效地将规则的第一个括号部分插入到新URL中。这意味着您对http://domain.com/random/rand/random.php的请求会尝试返回文件http://domain.com/random/index.php

此外,您的规则与第一个示例不符,因为该网址不包含正则表达式所需的/

相反,如果请求的URL不是文件或目录(或链接),那么只需将所有重写为index.php:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php [L,R]

请注意,我添加了R标记,这意味着请求系统(浏览器)会看到网址已更改...不确定这是否是您想要的。