【发布时间】:2011-07-25 14:50:37
【问题描述】:
我正在尝试让我的 .htaccess 文件从根目录工作,但也使用 RewriteRule 作为子目录。
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/admin/index.php$ [NC]
RewriteRule ^admin/(.*)$ /admin/index.php?_pd=$1 [QSA,L]
RewriteRule ^(.*)$ /index.php?_pd=$1 [QSA,L]
</IfModule>
但是,当我尝试访问 /admin/login 等时出现 404 错误。这种工作方式:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?_pd=$1 [QSA,L]
RewriteCond %{REQUEST_URI} !^/admin/index.php$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/(.*)$ /admin/index.php?_pd=$1 [QSA,L]
</IfModule>
但不是它应该怎么做。有些东西有效,有些无效。
【问题讨论】:
-
如果此 .htaccess 在
/admin/文件夹中,则重写规则中的模式不应包含admin/部分(URL 将相对于当前文件夹)。 -
好吧..因为我没有所有的细节——我可以建议交换 2 条规则(你的第二个例子)——将 3 行块移到 4 行块下方。这应该处理
/admin/xxxURL,因为现在/index.php采用所有URL(规则的顺序很重要)并且/admin/规则永远不会匹配。 -
这给了我一个
404虽然我知道/admin/index.php在那里。 -
好吧..在这种情况下我只能建议打开重写调试(
RewriteLogLevel 9)并检查重写日志。另请检查/admin/index.php的访问权限(以防万一)。 -
RewriteLogLevel指令不能放在 .htaccess 中 -- 只能放在服务器配置或虚拟主机上下文中。