所以我被要求清理我们当前在apache上运行的web应用的URL(版本2.4.9,如果有兴趣的话),但是在mod re_write命令搞乱了几个小时之后,米在圈子里跑来跑去。 这是我正在尝试做的事情。
如果url是这样的( http://www.foo.bar/admin/index.php ),它显示为http://www.foo.bar/admin
如果url是这样的( http://www.foo.bar/admin/testpage.php ),它显示为http://www.foo.bar/admin/testpage
如果url是这样的( http://www.foo.bar/admin/testpage.php?id=15&foo=www ),它显示为http://www.foo.bar/admin/testpage?id = 15&富= WWW
到目前为止,我已经到了index.php解决….大部分…..第二个例子有时解决…. 基本上我的代码似乎很片断,只有在文件树中下两层。 所以我想知道这里有没有人可以帮我解决这个问题呢? 这是我在虚拟主机文件(因为我不想在每个目录中都有.htaccess文件)
AllowOverride None RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]
像这样的东西应该工作:
RewriteRule ([^/]+)/(.*)/?index.php$ $1 RewriteRule \.php $1
编辑:第一条规则可以被这个更换,这更直截了当:
RewriteRule (.*)/index\.php?$ $1
例如:
URL = http://www.foo.bar/admin/index.php
匹配的规则= RewriteRule ([^/]+)/(.*)/?index.php$ $1
结果: http://www.foo.bar/admin : http://www.foo.bar/admin
URL = http://www.foo.bar/admin/testpage.php
匹配规则= RewriteRule \.php $1
结果= http://www.foo.bar/admin/testpage
URL = http://www.foo.bar/admin/testpage.php?id=15&foo=www
匹配规则= RewriteRule \.php $1
结果= http://www.foo.bar/admin/testpage?id=15&foo=www