2012-12-02 25 views
0

对不起,标题不对。 我现在用使用.htaccess进行网址重写。该怎么办?

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

其使用localhost/home 时工作正常,但我的问题是打字localhost/home.php时也works.I想打字localhost/home.php到一个错误页面请求的页面不存在时重定向。

我该怎么用.htaccess或者我应该使用php来重定向?

回答

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] 
+0

我上 的RewriteCond%{REQUEST_FILENAME}使用RewriteEngine叙述当有重定向循环\ .PHP $ 重写规则^(。*)$ HTTP://本地主机/错误[R] 的RewriteCond%{REQUEST_FILENAME} -D- RewriteCule%{REQUEST_FILENAME} \。php -f RewriteRule ^(。*)$ $ 1.php –

+0

不要将'localhost'(主机名)放入重写中,只需用'/'开始。 – jmlnik

+0

如果仍然不起作用,请尝试添加'L'选项(即'[R,L]'),但我怀疑它会需要那个 – jmlnik

1

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