mod_rewrite不允许访问现有目录

时间:2012-08-01 01:53:16

标签: apache .htaccess mod-rewrite seo

您好,感谢您抽出宝贵时间仔细阅读。

我在.htaccess中设置了规则来创建seo友好网址。我使用mysql和php来填充每个页面上的内容,这些内容都在index.php上。该规则设置为涵盖两个级别的链接,例如。

mysite.com/first-level-link mysite.com/first-level-link/second-level-link

该脚本目前在网站的前端完美运行(所有重定向到index.php的网页)。但我无法访问位于服务器上的真实目录中的站点的后端,路径看起来像这样 - mysite.com/admin/index.php

我已经包含了两个规则/条件,如果它们存在则应该忽略这些目录和文件。我将包括以下代码:

Options +SymLinksIfOwnerMatch

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

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

RewriteRule ^(.*)$ index.php?page=$1 
RewriteRule ^.*/(.*)$ index.php?page=$1 

1 个答案:

答案 0 :(得分:1)

!-f!-d条件仅适用于下一个RewriteRule,因此您的第二条规则没有任何与之相关的条件。您还需要复制该规则的条件。另一个问题是第二条规则被第一条规则取代。由于/some/path在匹配^(.*)$之前与^.*/(.*)$匹配,因此您需要更换它们。

因此,所有规则(从RewriteEngine on开始)都将如下所示:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/(.*)$ index.php?page=$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1