1

我花了几天的时间来获得重写规则以在我的专用服务器上安装 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] 
4

1 回答 1

0

以下是可用于/index.php从 URL 中的任何位置删除的代码:

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]
于 2013-09-21T17:36:41.693 回答