您好我需要显示所有未找到网址的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]
答案 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
标记,这意味着请求系统(浏览器)会看到网址已更改...不确定这是否是您想要的。