存在 mod_rewrite 规则应用不一致的问题

存在 mod_rewrite 规则应用不一致的问题

因此,有人要求我清理我们当前在 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/测试页面

如果 URL 类似这样(http://www.foo.bar/admin/testpage.php?id=15&foo=www),显示为http://www.foo.bar/admin/testpage?id=15&foo=www

到目前为止,我已经将它解析到 index.php 解析的位置....大部分.....并且第二个示例解析....有时。基本上,我拥有的代码似乎非常不稳定,并且只解析文件树中的两个级别。所以我想知道这里是否有人可以帮助我解决这个问题?这是我在 vhost 文件中的内容(因为我不想将它作为 .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]

答案1

类似这样的事情应该有效:

RewriteRule ([^/]+)/(.*)/?index.php$ $1
RewriteRule \.php $1

编辑:第一条规则可以用这条更直接的规则代替:

RewriteRule (.*)/index\.php?$ $1

例如:

网址 =http://www.foo.bar/admin/index.php

匹配规则 =RewriteRule ([^/]+)/(.*)/?index.php$ $1

结果 :http://www.foo.bar/admin


网址 =http://www.foo.bar/admin/testpage.php

匹配规则 =RewriteRule \.php $1

结果 =http://www.foo.bar/admin/testpage


网址 =http://www.foo.bar/admin/testpage.php?id=15&foo=www

匹配规则 =RewriteRule \.php $1

结果 =http://www.foo.bar/admin/testpage?id=15&foo=www

相关内容