通常是一个如下所示的网址: http://www.domain.com/product.php/12/
将打开product.php并提供/ 12 /作为请求参数,然后我的PHP脚本可以处理以提取正确的产品信息。但是,当我将整个站点迁移到新服务器后,我得到了404错误,因为在该服务器上,如果没有请求的目录,它不会默认为母目录/文件。
我依稀记得知道这通常是一个常见的apache函数,但我似乎无法回想起如何设置它或如何操作它..如果有一个.htaccess方法来实现这一点就会很棒。
答案 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要做的事情。