如何在URL中执行没有.php扩展名的PHP网页?
在Web根目录下创建.htaccess文件,并输入以下有:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^product/([0-9]+)$ product.php?id=$1
使用product.php的策略是什么?id = 777&storage = usa – Tuco 2011-04-08 00:42:29
这样只会达到9,因为它没有量词?^product /([0-9] +)$ product.php?id = $ 1 – 2011-04-08 00:47:40
RewriteRule^product /([0-9] +)/ storage /(.*)$ product.php?id = $ 1&storage = $ 2 – 2011-04-08 00:49:33
这事做与URL重写,这是你的东西设置通常与mod_rewrite的模块中的Apache
而是使用mod_rewrite你也可以用在你的.htaccess以下内容:
DefaultType application/x-httpd-php
而只是在服务器上命名您的脚本product
(不带.php文件扩展名)。
这样你就可以直接调用,并会接受任何附加的字符串作为$_SERVER["PATH_INFO"]
虽然这样做有一些重要的安全隐患,特别是如果应用程序允许用户上传。如果恶意用户可以上传一个文件并用一个扩展名来命名,而这个扩展名并没有被明确指示为PHP以外的东西,那么他将能够在服务器上执行PHP代码。 – 2011-04-08 03:12:39
确实。我希望安全后果是显而易见的。但以防万一:该设置需要在不需要的子目录中重置。特别是在世界可写的领域。 (无论如何,哪个OTOH不应低于webroot) – mario 2011-04-08 03:16:17
这是一件框架,如笨和正如其他人所建议的,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
变量,它可以是任何你想要的格式,并适当地处理请求。
不会CodeIgniter/Zend/Symfony /等。所有需要利用mod_rewrite来完成OP正在寻找的内容? – 2011-04-08 14:15:52
是的,我的意思是,如果你只是使用'mod_rewrite',你必须自己完成所有路由,但是默认情况下,所有的路由都具有这种路由,所以你只需启用'mod_rewrite'即可。 – 2011-04-08 14:27:03
好点。感谢澄清。 – 2011-04-08 14:44:08
对于我这个代码的工作:
在 “ 的/ etc/apache2的/网站可用/默认” 或 “ 的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]
如果uri是/hello.world,这个传奇将会失败 – Jacques 2018-01-07 06:03:53
我这样做是‘支持’(NOT 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版本运行。我还没弄清楚为什么会这样做,但它确实解决了设置默认处理程序的问题。
Apache或IIS? – Ben 2011-04-08 00:34:00
Apach | - | - | - | - | – Tuco 2011-04-08 00:44:09