没有.php扩展名的PHP URL格式?

时间:2015-08-21 12:08:47

标签: php mod-rewrite url-rewriting

我需要的是将字符串作为URL而不显示PHP文件名。我有文件contact.php页面我试图获取URL为 e.g。

  

localhost / contact.php

现在我得到的是我需要使用

访问此页面
  

本地主机/接触

对于每个页面,我都应该只按名字导航。

  

localhost / contact
  localhost / help
  本地主机/支持

2 个答案:

答案 0 :(得分:7)

如果您使用的是apache,则需要使用.htaccess文件。如果您使用的是IIS,则可以在IIS中进行配置。

查看this

您的.htaccess文件需要看起来像这样:

IndexIgnore * # prevent directory listing

Order deny,allow
Allow from *

# ------------------------------------------
# Rewrite so that php extentions are not shown
RewriteEngine on

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

由于文件限制,您不能简单地在Windows中创建.htaccess文件,因此请打开文本编辑器(Notepad ++或编程IDE)并创建一个名为.htaccess的新文件。 .在文件名前面很重要。

修改

没有重复的文件名。作为contact.php的IE contact.jshtaccess将无法知道要投放的是哪一个(取决于您的apache)将返回错误页面,否则它将只为其中一个投放。< / p>

正如@AedixRhinedale在下面的评论中所指出的那样:

来自Apache的注释:如果您有权访问httpd主服务器配置文件,则应该完全避免使用.htaccess文件。使用.htaccess文件会降低Apache http服务器的速度。您可以包含在.htaccess文件中的任何指令都可以在目录块中更好地设置,因为它具有相同的效果和更好的性能

答案 1 :(得分:0)

就这么简单。

1)在目录中创建.htaccess文件(如上所述,Windows对此有限制)。

2)只需插入一个即可。

# Turn mod_rewrite on
RewriteEngine On

##(Optional) Redirects http to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#### hiding .php extensions below:

# (optional) Ignore logic.php .. any page that is needed as mvc with .php exstensions 
RewriteCond %{THE_REQUEST} ^/logicpath/logic.php [NC]
RewriteCond %{THE_REQUEST} ^/logicpath/funcs.php [NC]
# (optional end ^)

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

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]


# (optional) Does the same for html paths
## To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo.html to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.php [L]
# (optional end ^)

如前所述,httpd主服务器配置文件要好得多。我不太确定如何解决主要配置文件,但是从小经验中我知道这并不完全相同。

如果其他人知道学习如何修改配置文件的好资源,请提及!