10

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

我怎样才能做到这一点?

4

13 回答 13

19

.htaccess把它放在你的 WWW-root 中命名的文件中:

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

如果您正在运行 Apache 并激活了 mod_rewrite,这将有效。

于 2011-04-29T12:02:09.933 回答
6

只需在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]

希望!这对某人有用!

于 2013-06-01T19:08:33.863 回答
3

您需要为您的 Web 服务器找到合适的它可以让你映射

www.domain.com/page

www.domain.com/page.php

于 2011-04-29T12:01:11.127 回答
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]
于 2013-07-08T10:28:10.820 回答
1

只是要指出,在旧版本的 IIS 上,例如 IIS6 并假设您处于 32 位进程中,那么 IONICS ISAPI Rewrite 是一个很棒的免费 url 重写模块。在 IIS 6 的 64 位内部,我发现商业产品 Helicon ISAPI Rewrite 3 是一个很棒的工具。但是,如果您使用 32 位,IONICS 是免费的,并且可以满足您的所有需求。

http://iirf.codeplex.com/

于 2011-04-29T12:00:53.473 回答
1

请参阅更改 URL 地址在 PHP 中缩短

于 2011-04-29T12:01:40.043 回答
1

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

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

堆栈溢出文章

搜索 Stack Overflow,您应该会找到已经提出的问题的答案。

于 2011-04-29T11:58:49.720 回答
1

在 apache2.conf 我有

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

这意味着data被视为没有扩展名的 PHP 文件

于 2011-04-29T12:03:25.197 回答
1

有几种方法可以做到这一点。

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

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

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

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

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

于 2011-04-29T12:04:36.557 回答
1

这是URL 重写的初学者教程

于 2011-04-29T12:04:39.113 回答
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]
于 2013-10-23T23:46:47.143 回答
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>

于 2018-02-21T11:39:19.587 回答
-1

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

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

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

于 2018-06-28T15:09:49.133 回答