Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTAccess和Regex。。。排除字符串?_Regex_.htaccess_Codeigniter - Fatal编程技术网

HTAccess和Regex。。。排除字符串?

HTAccess和Regex。。。排除字符串?,regex,.htaccess,codeigniter,Regex,.htaccess,Codeigniter,我正在使用htaccess重写我的URL的。。。具体而言,使用codeigniter。我有两个应用程序,一个叫做“前端”,另一个叫做“admincp”。前端应用程序使用index.php,将$application_文件夹更改为“frontend”。admincp应用程序使用复制的index.php,但重命名为admin.php。$application\u文件夹在此文件中更改为“admincp” 基本上,我希望将所有包含“admincp”作为第一个URi段的URi重写为admin.php文件,

我正在使用htaccess重写我的URL的。。。具体而言,使用codeigniter。我有两个应用程序,一个叫做“前端”,另一个叫做“admincp”。前端应用程序使用index.php,将$application_文件夹更改为“frontend”。admincp应用程序使用复制的index.php,但重命名为admin.php。$application\u文件夹在此文件中更改为“admincp”

基本上,我希望将所有包含“admincp”作为第一个URi段的URi重写为admin.php文件,而不是index.php文件。然后,所有其他的URL都会像往常一样被重写。。。到index.php

mysite.com/admin/members将转到admin.php/members mysite.com/articles/Some-Awesome-articles将转到index.php/articles

我希望我已经解释得足够好了。。。无论如何,这是我当前的htaccess文件,但它似乎不起作用。我得到一个内部服务器错误

 # Deny OR Allow Folder Indexes.
# Since we disable access to PHP files you 
# can leave this on without worries. 
# OR better yet, create a .htaccess file in
# the dir you want to allow browsing and
# set it to +Indexes
Options -Indexes

Options +FollowSymLinks

# Set the default file for indexes
DirectoryIndex index.php

<IfModule mod_rewrite.c>
    # mod_rewrite rules
    RewriteEngine on

    # The RewriteBase of the system (if you are using this sytem in a sub-folder).
    # RewriteBase /CodeIgniter_1.6.3/

    # This will make the site only accessible without the "www." 
    # (which will keep the subdomain-sensive config file happy)
    # If you want the site to be accessed WITH the "www." 
    # comment-out the following two lines.
    # RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
    # RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]

    # If a controler can't be found - then issue a 404 error from PHP
    # Error messages (via the "error" plugin)
    # ErrorDocument 403 /index.php/403/
    # ErrorDocument 404 /index.php/404/
    # ErrorDocument 500 /index.php/500/

    # Deny any people (or bots) from the following sites: (to stop spam comments)
    # RewriteCond %{HTTP_REFERER} nienschanz\.ru [NC,OR]
    # RewriteCond %{HTTP_REFERER} porn\.com
    # RewriteRule .* - [F]
    # Note: if you are having trouble from a certain URL just 
    # add it above to forbide all visitors from that site.

    # You can also uncomment this if you know the IP:
    # Deny from 192.168.1.1

    # If the file is NOT the index.php file
    RewriteCond %{REQUEST_FILENAME} !index.php
    # Hide all PHP files so none can be accessed by HTTP
    RewriteRule (.*)\.php$ index.php/$1

    # If the file/dir is NOT real go to index
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^admin/(.*)$ admin.php/$1
    RewriteRule ^(.*)$ index.php/$1

</IfModule>

# If Mod_ewrite is NOT installed go to index.php
<IfModule !mod_rewrite.c>
    ErrorDocument 404 index.php
</IfModule>  
#拒绝或允许文件夹索引。
#因为我们禁用了对PHP文件的访问,所以您
#你可以不用担心就把它打开。
#或者更好的是,在中创建一个.htaccess文件
#您要允许浏览的目录,以及
#将其设置为+索引
选项-索引
选项+FollowSymLinks
#设置索引的默认文件
DirectoryIndex.php
#mod_重写规则
重新启动发动机
#系统的基础(如果您在子文件夹中使用此系统)。
#重写BASE/CodeIgniter_1.6.3/
#这将使该网站仅可在没有“www”的情况下访问
#(这将使子域sensive配置文件保持愉快)
#如果您希望通过“www”访问该网站
#注释掉下面两行。
#重写cond%{HTTP_HOST}^www\.site\.com$[NC]
#重写规则^(.*)$http://site.com/$1[L,R=301]
#如果找不到控制器,则从PHP发出404错误
#错误消息(通过“错误”插件)
#ErrorDocument 403/index.php/403/
#ErrorDocument 404/index.php/404/
#ErrorDocument 500/index.php/500/
#拒绝以下网站的任何人(或机器人):(停止垃圾邮件评论)
#重写cond%{HTTP_REFERER}nienschanz\.ru[NC,或]
#重写cond%{HTTP_REFERER}porn\.com
#重写规则。*-[F]
#注意:如果您在某个URL上遇到问题,只需
#将其添加到上面以禁止该站点的所有访问者。
#如果您知道IP,也可以取消注释:
#从192.168.1.1中拒绝
#如果文件不是index.php文件
重写cond%{REQUEST_FILENAME}!index.php
#隐藏所有PHP文件,以便HTTP无法访问任何文件
重写规则(.*)\.php$index.php/$1
#如果文件/dir不是实文件,请转到索引
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^admin/(.*)$admin.php/$1
重写规则^(.*)$index.php/$1
#如果未安装Mod_ewrite,请转到index.php
ErrorDocument 404 index.php

您拥有的第一条规则将重写
admin.php
本身,看起来您将得到类似
/index.php/admin.php
的结果。另外,检查
的两个条件-f
-d
仅应用于
重写规则^admin/(.*)$admin.php/$1
规则。重写条件仅应用于紧跟在重写规则之后的单个条件。因此,您的
RewriteRule^(.*)$index.php/$1
规则没有任何条件,将盲目地重写每个URI。您也没有标志,因此重写将一直持续到最后(因此,您以前所做的任何重写都将被删除)

您需要重新排列规则:

# rewrite if the request starts with `/admin/`
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/(.*)$ admin.php/$1 [L]

# not even sure why you need this...
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteCond %{REQUEST_FILENAME} !admin.php
RewriteRule (.*)\.php$ index.php/$1 [L]

# everything else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

如前所述编写一个
重写规则
,将其放在您的“一网打尽”规则之前,最后以
[L]
结尾。它将跳过其余的处理,将该规则视为最后一条规则

RewriteRule ^admincp/(.*)$ admin.php/$1 [L]