好的,我在重写.htaccess文件中的规则时感到厌烦!对静态文件进行URL重写检查,然后重写为index.php
我期望的场景(使用URL http://doma.in/
作为例子):
- 首先检查以查看是否有
index.html
文件中的/public
子目录是否存在;如果是这样的话,可以提供服务- 如果没有,发球(重写)
index.php
- 如果没有,发球(重写)
要在我的例子扩大,说我们请求的URL http://doma.in/js/foobar.js
:
- 首先检查,看是否
foobar.js
文件中的/public/js
次目录的存在;如果是这样的话,可以提供服务- 如果没有,发球(重写)
index.php?controller=js%2Ffoobar.js
- 如果没有,发球(重写)
将涵盖静态文件,但我还需要网址,像http://doma.in/foo
:
- 首先检查,看是否
foo
文件中的/public
次目录的存在;如果是这样的话,可以提供服务- 如果没有,发球(重写)
index.php?controller=foo
- 如果没有,发球(重写)
和URL http://doma.in/foo/bar
:
- 我们可以假设
foo/bar
不存在于/public
子目录的文件不能被命名为喜欢该文件。- 所以服务(重写)
index.php?controller=foo&action=bar
- 所以服务(重写)
我敢肯定,如果这个复杂的(对我来说)位被盖住,那么我可以工作的查询串入的场合太多;所以http://doma.in/foo/bar/foo/bar
将服务index.php?controller=foo&action=bar&querystring=foo%2Fbar
。
我也想确保一个斜线的处理一样,如果尾随斜线省略,例如:http://doma.in/foo/bar/foo/bar
和http://doma.in/foo/bar/foo/bar/
我会从我的应用程序内处理404,就好像文件不存在,它会重定向到index.php
这确实存在 - 我很高兴与此,除非你有更好的解决方案:)
我真的希望这一切都有道理,因为我一直在寻找解决方案到现在这一整天,这是我所有的:
Options +FollowSymLinks
RewriteEngine on
RewriteBase/
#RewriteBase /prompt-v3/
#RewriteCond %{REQUEST_URI} ^/prompt-v3/(.*)$
RewriteCond $1 !^public
RewriteRule ^(.*)$ public/$1 [R]
注释掉的行在远程主机上处理子目录。到目前为止,我可以重定向到/public
子目录,如果该文件存在那就是它。
谢谢大家的帮助!