在.htaccess的帮助下删除.php扩展名

时间:2017-05-10 06:27:49

标签: php .htaccess

我想从网址中删除.php文件扩展名,我已经在.htaccess文件中编写了代码,但我遗漏了一些内容,因为默认情况下我打开网页时并没有这样做。我有.php扩展名,但如果我在.php中手动添加URL扩展名,那么该页面也会打开,我想避免这种情况。

.htaccess文件:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# rewrite category
RewriteEngine On
RewriteRule ^blog-category/(.*)$ blog-category.php?category=$1 [NC,L]

# rewrite blog
RewriteEngine On
RewriteRule ^blog/(.*)$ blog.php?title=$1 [NC,L]

# error pages
RewriteEngine On
ErrorDocument 404 /404.php

# on 301 error redirect to softcrayons.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^softcrayons.com
RewriteRule (.*) http://www.softcrayons.com/$1 [R=301,L]

3 个答案:

答案 0 :(得分:1)

在该动态配置文件中没有任何内容实际上阻止直接调用脚本。您必须为此添加另一个重定向:

RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.php$ $1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([^.]+)/?$ $1.php [L]

这将强制执行外部重定向(因此更改浏览器中可见的URL),并对使用.php文件扩展名的所有请求以及该文件实际存在的位置发出第二个请求。

请注意,您可能必须注意不要创建无限重写循环。

如果该文件确实存在,我还添加了一些附加条件,只在内部重写.php

如果确实想要创建错误,那么对于具有.php文件扩展名的网址的请求,http状态404会替换上面代码中的重写规则,如下所示:

RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.php$ - [R=404]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([^.]+)/?$ $1.php [L]

但是请注意,正如我已经说过的那样,我认为这是一个愚蠢的事情。为什么会因为错误而让用户感到沮丧?你知道他们真正想要什么,你可以满足这个要求。往正面想!

一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。

答案 1 :(得分:0)

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]`

答案 2 :(得分:0)

<强> HTML:

<a href="home">Index</a>

的.htaccess

 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^([^\.]+)$ $1.php [NC,L]

链接会将您重定向到home.php文件,您的网址将是example.com/home希望这会对您有所帮助。

问候!