我使用 php 构建 Web 应用程序,但我希望我的网页在浏览器的地址栏中没有 .php 扩展名。例如在浏览器的地址栏中http://www.example.com/index.php
显示。http://www.example.com/index
我怎样才能做到这一点?
我使用 php 构建 Web 应用程序,但我希望我的网页在浏览器的地址栏中没有 .php 扩展名。例如在浏览器的地址栏中http://www.example.com/index.php
显示。http://www.example.com/index
我怎样才能做到这一点?
.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,这将有效。
只需在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]
希望!这对某人有用!
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]
只是要指出,在旧版本的 IIS 上,例如 IIS6 并假设您处于 32 位进程中,那么 IONICS ISAPI Rewrite 是一个很棒的免费 url 重写模块。在 IIS 6 的 64 位内部,我发现商业产品 Helicon ISAPI Rewrite 3 是一个很棒的工具。但是,如果您使用 32 位,IONICS 是免费的,并且可以满足您的所有需求。
在使用 Apache 网络服务器的系统上,您将使用 mod_rewrite。
在较新版本的 IIS 上,您可以使用他们的 mod_rewrite 版本。在旧版本上,您需要购买插件。
搜索 Stack Overflow,您应该会找到已经提出的问题的答案。
在 apache2.conf 我有
<Files data>
ForceType application/x-httpd-php
</Files>
这意味着data
被视为没有扩展名的 PHP 文件
有几种方法可以做到这一点。
您可以使用 mod-rewrite 将 foo 重新连接到 foo.php,以便 /bar 的请求由 /bar.php 处理。
您可以使用目录和默认文件,以便链接到由 /foo/index.php 处理的目录 /foo/
您可以将 php 脚本设置为 404 错误的处理程序,然后您只需链接到不存在的文件,处理程序文件就会根据需要处理它。(通常通过使用某种从 url 到 php 文件的映射)
您可以告诉您的网络服务器对某个网络服务器的所有请求都将由 php 处理。
第一个或第二个解决方案是最简单的,但最后两个提供了最好的灵活性,其变体是大多数大型框架所做的。
这是URL 重写的初学者教程。
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]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
将此代码插入远程服务器上的 .htaccess 文件中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
这将以您想要的方式重写 URL。