如何从地址栏隐藏.php

时间:2011-04-29 11:56:17

标签: php url address-bar

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

我该怎么做?

13 个答案:

答案 0 :(得分:11)

将其放入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,则此方法有效。

答案 1 :(得分:5)

只需在 wamp / www / 中创建.htaccess文件,然后复制粘贴此代码即可。

Options +FollowSymlinks


RewriteEngine On


RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f


RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME}.php -f

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

希望!这对某人有用!!

答案 2 :(得分:3)

您需要为您的网络服务器找到的适当方法。它可以让你映射

www.domain.com/page

www.domain.com/page.php

答案 3 :(得分:3)

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]

答案 4 :(得分:1)

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

在较新版本的IIS上,您可以使用其版本的mod_rewrite。在旧版本上,您需要购买插件。

Stack Overflow article

搜索Stack Overflow,你应该找到已经问过的问题的答案。

答案 5 :(得分:1)

只是要指出在旧版本的IIS上,例如IIS6并假设您处于32位进程,那么IONICS ISAPI Rewrite是一个非常棒的免费网址重写模块。在IIS 6中的64位内部,我发现商业产品Helicon ISAPI Rewrite 3是一个很棒的工具。但是,如果你是32位,IONICS是免费的,并且会做你需要的一切。

http://iirf.codeplex.com/

答案 6 :(得分:1)

答案 7 :(得分:1)

在apache2.conf中我有

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

这意味着data被视为没有扩展名

的PHP文件

答案 8 :(得分:1)

有几种方法可以做到。

您可以使用mod-rewrite将foo重新连接到foo.php,以便/ bar的请求由/bar.php处理。

您可以使用目录和默认文件,以便链接到由/foo/index.php处理的direcory / foo /

您可以将php脚本设置为404错误的处理程序,然后只需链接到不存在的文件,处理程序文件就可以处理它。 (通常使用从url到php-file的某种映射)

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

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

答案 9 :(得分:1)

以下是a beginners tutorial用于网址重写。

答案 10 :(得分: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]

答案 11 :(得分: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>

答案 12 :(得分:-1)

将此代码插入到远程服务器上的.htaccess文件中:

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

这将按照您想要的方式重写URL。