mod_rewrite摆脱index.php

时间:2013-09-21 15:22:19

标签: php .htaccess mod-rewrite url-rewriting

我花了几天时间才能获得重写规则,以便在我的专用服务器上安装OJS程序(http://pkp.sfu.ca/?q=ojs)。我的服务器安装了Apache 2.4.2和PHP 5。它有另外两个PHP程序(一个工作板和一个论坛),带有重写规则,用于删除index.php工作正常。然而,对于OJS计划,我尝试了我能在网上找到的所有规则,并且无法使重写工作。问题始终是重定向循环。这是我在.htaccess中尝试的规则(注释掉的行单独测试或与其他人一起测试):

Options +FollowSymLinks
RewriteEngine On
#RewriteBase /

# Use this set of 3 lines for each of your journals
#RewriteCond %{SERVER_NAME} ^www.mysite.org
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !=/index.php
#RewriteCond %{REQUEST_URI}  !^/index.php/.*
#RewriteRule ^(.*)$ index.php/$1" [L,NS] 
RewriteRule ^(.*)$ index.php/$1 [QSA,L] 

# Use this set of 3 lines to allow access to the site level
#RewriteCond %{SERVER_NAME} ^www.mysite.org
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ "/index.php/index/$1" [QSA,L]


#RewriteCond %{SERVER_NAME} ^www.mysite.org
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
#RewriteCond %{REQUEST_URI} index.php
#RewriteRule ^(.*)$ /index.php/$1 [QSA,L]
#RewriteCond %{REQUEST_URI} !=/index.php
#RewriteRule ^(.*)$ index.php/$1" [L,PT]  

以下是Apache错误日志

[Sat Sep 21 00:08:53.413993 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a725b0/initial] [perdir /home/mysite/public_html/] strip per-dir prefix: /home/mysite/public_html/journal -> journal
[Sat Sep 21 00:08:53.414013 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a725b0/initial] [perdir /home/mysite/public_html/] applying pattern '^(.*)$' to uri 'journal'
[Sat Sep 21 00:08:53.414039 2013] [rewrite:trace2] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a725b0/initial] [perdir /home/mysite/public_html/] rewrite 'journal' -> '/index.php/journal'
[Sat Sep 21 00:08:53.414051 2013] [rewrite:trace2] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a725b0/initial] [perdir /home/mysite/public_html/] trying to replace prefix /home/mysite/public_html/ with /
[Sat Sep 21 00:08:53.414061 2013] [rewrite:trace1] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a725b0/initial] [perdir /home/mysite/public_html/] internal redirect with /index.php/journal [INTERNAL REDIRECT]
[Sat Sep 21 00:08:53.414109 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a740c8/initial/redir#1] [perdir /home/mysite/public_html/] add path info postfix: /home/mysite/public_html/index.php -> /home/mysite/public_html/index.php/journal
[Sat Sep 21 00:08:53.414122 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a740c8/initial/redir#1] [perdir /home/mysite/public_html/] strip per-dir prefix: /home/mysite/public_html/index.php/journal -> index.php/journal
[Sat Sep 21 00:08:53.414132 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a740c8/initial/redir#1] [perdir /home/mysite/public_html/] applying pattern '^(.*)$' to uri 'index.php/journal'
[Sat Sep 21 00:08:53.414151 2013] [rewrite:trace1] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a740c8/initial/redir#1] [perdir /home/mysite/public_html/] pass through /home/mysite/public_html/index.php
[Sat Sep 21 00:08:53.414206 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/subreq] [perdir /home/mysite/public_html/] strip per-dir prefix: /home/mysite/public_html/journal -> journal
[Sat Sep 21 00:08:53.414230 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/subreq] [perdir /home/mysite/public_html/] applying pattern '^(.*)$' to uri 'journal'
[Sat Sep 21 00:08:53.414249 2013] [rewrite:trace2] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/subreq] [perdir /home/mysite/public_html/] rewrite 'journal' -> '/index.php/journal'
[Sat Sep 21 00:08:53.414260 2013] [rewrite:trace2] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/subreq] [perdir /home/mysite/public_html/] trying to replace prefix /home/mysite/public_html/ with /
[Sat Sep 21 00:08:53.414267 2013] [rewrite:trace1] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/subreq] [perdir /home/mysite/public_html/] internal redirect with /index.php/journal [INTERNAL REDIRECT]
[Sat Sep 21 00:08:53.492920 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/initial] [perdir /home/mysite/public_html/] strip per-dir prefix: /home/mysite/public_html/journal -> journal
[Sat Sep 21 00:08:53.492937 2013] [rewrite:trace3] [pid 22466] mod_rewrite.c(468):  [www.mysite.com/sid#9a22888][rid#9a80650/initial] [perdir /home/mysite/public_html/] applying pattern '^(.*)$' to uri 'journal'

有人能告诉我如何让它工作,问题是mod_rewrite还是OJS程序?

提前感谢您的时间。

编辑:现在我尝试了以下仍然存在同样问题。

DirectoryIndex index.php
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# internally add index.php to all URIs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !^index\.php index\.php%{REQUEST_URI} [L,NC] 

1 个答案:

答案 0 :(得分:0)

以下是您可以用来从网址中的任何位置删除/index.php的代码:

DirectoryIndex index.php

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*?/+)index\.php(?:/(.*))?[\s?] [NC]
RewriteRule ^ %1%2 [L,R]

# internally add index.php to all URIs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !^index\.php index\.php%{REQUEST_URI} [L,NC]
相关问题