【发布时间】:2011-08-01 03:18:10
【问题描述】:
对不起,菜鸟问题,从我应该搜索的内容中无法理解。
我正在使用该页面创建一个网站product.php?id=777
我希望它是product/777
谢谢!
【问题讨论】:
标签: php apache url-rewriting
对不起,菜鸟问题,从我应该搜索的内容中无法理解。
我正在使用该页面创建一个网站product.php?id=777
我希望它是product/777
谢谢!
【问题讨论】:
标签: php apache url-rewriting
在您的 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 就可以了!
【讨论】:
这是像 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 变量,它可以是您想要的任何格式,并适当地处理请求。
【讨论】:
mod_rewrite,你必须自己绑定所有路由,但框架默认拥有所有路由,所以你要做的就是启用mod_rewrite.
多年来,我一直使用以下代码执行名为“Support”的文件(不是 Support.php,我不希望通过两种方式访问该文件)。
<Files Support>
SetHandler php-script
</Files>
但是,当我使用 Plesk 以 PHP 7.0 执行脚本时,我开始遇到这个问题。根目录 (.com/index.php) 可以作为 PHP 7 运行,但我的任何 php 脚本文件 (.com/Support) 都可以作为我的 Plesk 默认 PHP 5.4 版本运行。我还没有弄清楚它为什么这样做,但它确实解决了设置默认处理程序的问题。
【讨论】:
<Files> 指令有效,SetHandler 无效。
对我来说,这段代码有效:
在“/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]
【讨论】: