添加/后,apache服务器上的URL不会默认为.php文件

时间:2011-01-07 07:43:26

标签: php apache url path dns

通常是一个如下所示的网址: http://www.domain.com/product.php/12/

将打开product.php并提供/ 12 /作为请求参数,然后我的PHP脚本可以处理以提取正确的产品信息。但是,当我将整个站点迁移到新服务器后,我得到了404错误,因为在该服务器上,如果没有请求的目录,它不会默认为母目录/文件。

我依稀记得知道这通常是一个常见的apache函数,但我似乎无法回想起如何设置它或如何操作它..如果有一个.htaccess方法来实现这一点就会很棒。

3 个答案:

答案 0 :(得分:2)

你所指的是mod_rewrite。它的官方文档在这里:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

您可以在VHost定义(推荐)或.htaccess文件中对其进行配置。

假设您要将所有请求映射到Apache无法提供的资源(例如不存在的文件)到products.php,您可以使用以下命令:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ /products.php?request=$1 [NC,L]

然后,您可以使用$_GET['request']获取所请求的路径并从中获取,具体取决于您要执行的操作。我通常建议让mod_rewrite处理解析请求并将正确的属性传递给PHP,但如果你不熟悉mod_rewrite,那么在PHP中执行它可能更容易。

答案 1 :(得分:1)

你可以使用mod重写引擎将其映射到

http://www.domain.com/product.php?arg=12

Mod重写详情:http://forum.modrewrite.com

样品:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^files/([^/]+)/(.+) files.php?app=$1&file=$2 [NC]

此重写规则会将包含 files / firstrPart / secondpart 的任何请求映射到脚本 files.php

文件后的第一个和第二个斜杠之间的所有内容都将作为参数 app 传递,其余部分将作为文件传递

基本上你用一些子表定义一个正则表达式,并说明应该真正调用哪个脚本。

你可以用$ n来引用子模式,其中n是模式的基于1的索引。

玩得开心。

注意这是mod重写的极端简化。请在使用之前做一些研究,因为这可能会出现严重错误......

答案 2 :(得分:0)

您正在寻找的指令是“AcceptPathInfo on”。 mod_negotiations MultiViews功能还可以让你选择不包括“.php”,这是另一个人们滥用mod_rewrite要做的事情。