0

抱歉标题不好。我现在正在使用

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

它在使用时工作正常localhost/home 但我的问题是在键入时localhost/home.php它也可以工作。我想在键入时重定向localhost/home.php到请求页面不存在的错误页面。

我怎么能用 .htaccess 来做呢,还是应该使用 php 来重定向?

4

2 回答 2

1

当您请求带有“.php”扩展名的 URL 时,您的 .htaccess 条件都不满足,因此服务器 (Apache) 只是正常处理请求。这就是它起作用的原因。

我认为最简单的方法是在前一条规则之前添加另一条规则:

RewriteCond %{REQUEST_URI} \.php$ # if it ends in .php
# note we're using REQUEST_URI above to only match when
# the URI ends in .php, not the requested file,
# otherwise we would have a endless loop!
RewriteRule ^(.*)$ /error_page.php # note the leading slash

如果您希望浏览器重定向(我认为您需要添加完整路径),请添加选项,例如[R]RedirectRule

RewriteRule ^(.*)$ /path/error_page.php [R]
于 2012-12-02T14:34:07.360 回答
1

您正在做的是将“.php”附加到 REQUEST_FILENAME 如果它不是目录,并且如果将“.php”添加到它会导致现有页面。当您键入时localhost/home.php,重写不会触发,因为它不会找到localhost/home.php.php. 所以对于第二种情况,重写是完全无关的。您可能需要检查是否正确设置了对 404 情况的正常处理。例如,您是否配置了ErrorDocument指令?然后您可能会考虑删除-f条件并让它重定向到home.php.php当然会失败的条件。

于 2012-12-02T14:42:32.763 回答