繁体   English   中英

如何在 URL 中没有 .php 扩展名的情况下执行 PHP 网页?

[英]How to execute a PHP web page without the .php extension in the URL?

对不起,菜鸟问题,无法理解我应该搜索的内容。

我正在用那个页面product.php?id=777创建一个网站
我希望它是product/777

谢谢!

在您的 Web 根目录中创建 .htaccess 文件并在其中输入以下内容:

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^product/([0-9]+)$ product.php?id=$1

除了使用 mod_rewrite,您还可以在 .htaccess 中使用以下内容:

 DefaultType application/x-httpd-php 

只需在服务器上命名您的脚本product (不带 .php 文件扩展名)。

因此,您可以直接调用它,并将接收任何附加的字符串作为$_SERVER["PATH_INFO"]

如果您不想使用 mod_rewrite (我没有)并且其他答案似乎对您不起作用(它们对我不起作用)。 然后你可以试试这是你在 Apache 2.4+ 上运行。

更不安全的版本:让没有扩展名的任何东西都作为 PHP 文件运行(如果像我的实现一样,整个服务器只有一个文件,但如果有人这样做,你仍然可以任意执行,这还不错能够将文件写入该目录...再说一次,如果他们可以写入文件,他们可以给它一个 PHP 扩展名,所以不确定这是否真的扩大了你的曝光率。)

<FilesMatch "^[^.]+$">
    ForceType application/x-httpd-php
</FilesMatch>

将其放在目录的 .htaccess 文件中(假设您启用了这些文件)或直接将其放在主机定义中的部分中。

如果你想让它更具体(也许更安全),你可以用更具体的东西替换正则表达式:

<FilesMatch "^MySingleFileWithNoExension$">
    ForceType application/x-httpd-php
</FilesMatch>

编辑:如果您只想定位一个文件,则不需要正则表达式。 改用这个

<Files "MySingleFileWithNoExension">
    ForceType application/x-httpd-php
</Files>

然后只需重新启动 Apache,您就可以开始了!

多年来,我一直使用以下命令来执行名为“Support”的文件(不是 Support.php,我不想通过两种方式访问​​该文件)。

<Files Support>
    SetHandler php-script
</Files>

但是,当我使用 Plesk 作为 PHP 7.0 执行脚本时,我开始遇到这个问题。 根 (.com/index.php) 将作为 PHP 7 运行就好了,但我的任何 php-script 文件 (.com/Support) 将作为我的 Plesk 的默认 PHP 5.4 版本运行。 我还没有弄清楚为什么要这样做,但它确实解决了设置默认处理程序的问题。

这是像 CodeIgniter 和 Zend 这样的框架轻松完成的事情,但仍然可以像其他人建议的那样仅使用 Apache 的mod_rewrite来完成。 基本上,使用这样的 .htaccess 将所有流量定向到一个页面:

<IfModule mod_rewrite.c>
    RewriteEngine On

        RewriteCond                     %{REQUEST_FILENAME} !-f
        RewriteCond                     %{REQUEST_FILENAME} !-d
    RewriteRule                 ^(.*)$ index.php?_url=$1 [QSA,L]
</IfModule>

进入该页面后,您可以解析该_url变量,它可以是您想要的任何格式,并适当地处理请求。

对我来说,这段代码有效:

在“ /etc/apache2/sites-available/default ”或“ httpd.conf ”中

您必须(至少)在默认目录中有这些选项

...
    <Directory />
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

或在站点特定站点目录中

...
    <Directory "/var/www/my-site">
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

并创建(它可能不存在,确保它可以被 apache 读取)或编辑站点目录中的“ .htaccess ”(例如“/var/www/my-site/.htaccess”)并添加此代码:

AddType application/x-httpd-php htm html php
AddHandler application/x-httpd-php .htm .html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM