我一直在这个工作了一段时间,但我没有find我正在寻找什么。 我正在编写一个web应用程序,让我的用户在他们select的域和URL文件夹结构中创build和发布HTML内容片段。 所有内容和请求的URL结构都存储在数据库中。 我有我的index.php(在根文件夹)中的所有代码来访问数据库内容,并根据服务器名称(希望文件夹结构)将从数据库中挑出适当的内容,并显示到底用户浏览器。 所以我的情况是这样的:
www.test.com/index.php?id=123234345
…将显示适当的页面,但我希望我的用户能够定义一个唯一的“页面名称”,而不是使用数字索引(我也想隐藏/index.php部分),所以我想最终用户看到的是:
www.test.com/arbitrary-unique-keyword/keyword2/keyword3
这将调用根文件夹中的index.php页面。 然后我将使用PHP $ _SERVER ['PATH_INFO']variables来匹配请求的文件夹结构和我的数据库中正确的内容,并显示它。 到目前为止我发现的所有材料都希望我将文件夹结构的一部分硬编码到规则中,但是我想我想要更简单一些(也许)。
所以这个问题简而言之:
我如何使用mod_rewrite允许所有“不存在的”文件夹path传递到位于根文件夹中的主index.php? (对于所有存在的path,就像调用图像一样…我希望这些成功,而不是直接指向index.php)
谢谢大家,请让我知道,如果我能清除任何东西。
你可以用RewriteCond来完成这个工作,使用-f条件来testing文件是否存在,例如:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php/$1
但是,如果有多个重写条件或Alias / ScriptAlias指令,情况可能会更复杂。 在这种情况下,服务器可能无法提供REQUEST_FILENAME 。 一个更安全的方法,但一个可能是错误的复杂设置,是直接使用DOCUMENT_ROOT ,即
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f RewriteRule ^(.*)$ /index.php/$1