这是我的情景。我的应用网址显示如下:
example.com/index.php/article/whatever/here
为了从url中删除index.php我把它放在我的.htaccess中并且工作正常:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
现在,我的问题是我有这样的include和admin.php:
example.com/admin.php/manage/whatever/here
我不知道如何在没有与index.php发生冲突的情况下从url中删除admin.php,因为我已经尝试了这个并且显示了500内部服务器错误:
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteRule ^(.*)$ /admin.php/$1 [L]
修改
另一个尝试是这个,没有,因为显示404错误:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*?)/(.*) /$1/$2 [L]
我的所有网址都应该有几个参数:
example.com/this/is/a/large/url/because/is/requiered
编辑2:
我已经创建了两个规则,每个规则单独工作正常!但两者都无法合作:
RewriteRule ^admin/(.*)$ /admin.php/$1 [L]
RewriteRule ^(.*)$ /index.php/$1 [L]
答案 0 :(得分:1)
尝试:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ${REQUEST_URI} ^admin/(.*)$ [NC]
RewriteRule ^(.*)$ /admin.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
然后至少用以下方法测试:
http://www.example.com/some/url
http://www.example.com/admin/some/url
答案 1 :(得分:0)
您可以稍微修改重写规则以捕获路径的第一部分,并在替换中使用它。试试这个:
RewriteRule ^/(.*?)/(.*) /$1/$2 [L]
基本上()
会创建一个捕获组,因此前两个/
之间的任何内容都将被捕获为$1
,之后的任何内容都将被捕获为$2
请注意,如果您只希望此替换适用于index.php
和admin.php