设置:我拥有一个运行Apache和PHP的常规Unix Web服务器。 它按预期提供PHP脚本。
当前情况:我的所有链接看起来都像参数website.net/index.php?show=article&do=new
的典型PHP链接
我想要的是什么:用于重新映射我的网址的mod_rewrite规则,无论它们的外观或包含方式如何。
例如: website.net/article/new
应该重定向到index.php而$_SERVER['REQUEST_URI']
应该包含/article/new/
等等,但不限于此而且没有固定模式(* n个变量),所有其他工作都是用PHP完成的(验证,包括)。
我迄今为止的努力:使用谷歌很多并尝试了许多示例。但只发现一些固定模式,有些甚至打破了整个网站。
另一个问题:我在尝试使用mod_rewrite时注意到它打破了我的js和css文件的路径。 我使用相对路径,它们位于相对于index.php
的子文件夹中 <script src="js/included_file.js"></script>
<link href="css/included_file.css" rel="stylesheet"">
答案 0 :(得分:0)
您可以使用-f
RewriteCondition排除文件:
RewriteCond %{REQUEST_FILENAME} !-f #exclude files
RewriteRule ^(.*) index.php?__path=$1 [QSA] #catch everything
如果你想保留目录,你也可以使用-d
。
现在,如果您拨打网址:
website.net/path/to/file?query=string&foo=bar
你会得到(在$_GET
中):
__path = "/path/to/file"
query = "string"
foo = "bar"
请勿使用$_REQUEST
。它是非标准的并混合$_GET
和$_POST
,它可能导致非常奇怪的错误。