0

您好,我需要为所有未找到的 url 显示 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]
4

1 回答 1

1

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

此外,您的规则与您的第一个示例不匹配,因为该 URL 不包含/regex 所需的 。

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

RewriteEngine On
RewriteBase /

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

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

于 2013-08-29T08:20:09.607 回答