2011-04-29 140 views
7

我使用php来构建web应用程序,但是我希望我的网页在浏览器地址栏中没有.php扩展名。例如http://www.example.com/index.php在浏览器的地址栏中显示如http://www.example.com/index如何从地址栏中隐藏.php

我怎样才能做到这一点?

+0

你必须使用htaccess的为 – 2011-04-29 11:58:15

+0

某种类型相关:[?为什么有些网站的网址不包括文件扩展名(HTTP:// stackoverflow.com/questions/3631153/how-come-some-site-urls-do-not-include-a-file-extension) – Gumbo 2011-04-29 12:04:20

回答

9

在你的WWW根命名.htaccess文件将这个:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)?$ $1.php 

钍如果你正在运行Apache并且启动了mod_rewrite,那么这些工作是有效的。

+0

你能解释一下吗? – 2014-02-21 06:54:05

+1

@ ling.s:现在就看到你的评论。当然。这里重要的是RewriteRule,它将任何请求URI的完整路径与任何PHP文件进行匹配,并将其传递给文件$ 1.php,$ 1是该正则表达式的第一个(也是唯一)匹配项。 – 2015-11-26 10:12:13

1

在使用Apache网络服务器的系统上,您可以使用mod_rewrite。

在较新版本的IIS上,您可以使用它们的mod_rewrite版本。在旧版本中,你需要购买一个插件。

Stack Overflow article

搜索栈溢出,你应该找到答案,已经提出的问题。

1

只是要指出,在IIS的旧版本,例如IIS6,并假设你是在一个32位的进程,然后IONICS ISAPI重写是一个梦幻般的免费网址重写模块。在IIS 6的64位内部,我发现商业产品Helicon ISAPI Rewrite 3是一个很好的工具。但是,如果你使用32位,IONICS是免费的,你可以做任何你需要的。

http://iirf.codeplex.com/

3

你想找到的对Web服务器的适当的方法。它可以让你映射

www.domain.com/page

www.domain.com/page.php

1

在apache2.conf我

<Files data>  
ForceType application/x-httpd-php  
</Files> 

这意味着data被视为一个PHP文件不带扩展名

1

有这样做的几种方法。

您可以使用mod-rewrite将foo重新连接到foo.php,这样/ bar的请求就会被/bar.php处理。

您可以使用目录和默认的文件,让你链接到猪病/富/它获取由/foo/index.php

处理您可以设置一个PHP脚本作为处理程序404 - 错误,那么你只需链接到不存在的文件,然后处理程序文件处理它,但它喜欢。 (通常通过使用从url到php文件的某种映射)

您可以告诉您的网络服务器,某个网络服务器的所有请求都由php来处理。

第一个或第二个解决方案是最简单的,但最后的两个解决方案提供了最好的灵活性,其变体是大多数大型框架所做的。

4

WAMP只需创建一个.htaccess文件/ WWW/和复制粘贴此代码..

Options +FollowSymlinks 


RewriteEngine On 


RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 


RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_FILENAME}.php -f 

RewriteRule ^(.+)$ /$1.php [L,QSA] 

希望!这对某人会有用!

2
Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

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

# To internally redirect /dir/foo/ to /dir/foo.php 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 
1
little modification - better to use REQUEST_URI and check for the directory 


# Turn mod_rewrite on 

RewriteEngine on 

# To externally redirect /dir/foo.html to /dir/foo/ 
RewriteCond %{REQUEST_URI} ^(.+)\.html?$ [NC] 
RewriteRule^%1 [R,L] 

# To internally redirect /dir/foo/ to /dir/foo.html 
RewriteCond %{DOCUMENT_ROOT}/$1 !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^(.*?)/?$ $1.html [L] 

# To externally redirect /dir/foo.html to /dir/foo/ 
RewriteCond %{REQUEST_URI} ^(.+)\.html?$ [NC] 
RewriteRule^%1 [R,L] 

# To internally redirect /dir/foo/ to /dir/foo.html 
RewriteCond %{DOCUMENT_ROOT}/$1 !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^(.*?)/?$ $1.html [L] 
0

<IfModule mod_rewrite.c> 
 
RewriteEngine On 
 
RewriteBase/
 
RewriteRule ^index\.php$ - [L] 
 
RewriteCond %{REQUEST_FILENAME} !-f 
 
RewriteCond %{REQUEST_FILENAME} !-d 
 
RewriteRule . /index.php [L] 
 
</IfModule>

+0

欢迎来到StackOverflow!上面的代码究竟在哪里?请简要说明所发布的任何代码的上下文。 – 1000Nettles 2018-03-03 03:29:01