[英]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.