Apache重写条件无法捕获现有目录或文件

时间:2016-07-06 01:24:36

标签: apache mod-rewrite url-rewriting

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/board/([a-zA-Z0-9\_\-]*).* /board/index.php?$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/board/user/([a-zA-Z0-9\_\-]*).* /board/user/index.php?$1 [L]

我正在尝试将 mydomain.com/board/something 转发给 mydomain.com/board/index.php?something / board / user / /board/user/index.php?something 的内容。并且不要重写现有的文件或目录。

董事会/一个工作但即使我请求现有目录它也会激活,所以我无法测试第二个。此外,像mydomain.com/board/signup/index.php这样的页面也会转发到/board/index.php?signup

这些都在<VirtualHost *:443>范围内,而我的VPS实际上是在同一个实例上处理一些不同的域名,如果这会产生影响的话。

我在搜索中发现了类似的问题,但他们的解决方案已经在我上面使用了。

1 个答案:

答案 0 :(得分:1)

显然在Apache 2.4(可能是2.2及以上?)你必须这样做:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d

但是,如果你在那里有一个index.php导航到mydomain.com/board/,那就无法理解了。所以这就是我最终想出来的。

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond $1 !index\.
RewriteCond %{DOCUMENT_ROOT}/board/$1/index.php !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^/board/([a-zA-Z0-9\_\-\.]*) /board/index.php?$1 [L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond $1 !index\.
RewriteCond %{DOCUMENT_ROOT}/board/user/$1/index.php !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^/board/user/([a-zA-Z0-9\_\-\.]*) /board/user/index.php?$1 [L]