【问题标题】:Apache mod_rewrite REST URLApache mod_rewrite REST URL
【发布时间】:2012-10-13 20:59:25
【问题描述】:

请帮我解决这个问题,这应该很容易,但我从未设法正确学习 Apache mod_rewrite 的语法...

我有一个用 PHP 实现的 REST Web 服务,我需要重写以下 URL:

[1] http://www.myserver.com/service/ca;x={valx},y={valy},z={valz}

进入

[2] http://www.myserver.com/service/ca.php?x={valx}&y={valy}&z={valz}

如何做到这一点?

我在 Ubuntu 上使用 Apache2,这是配置:

Alias "/service" "/opt/htdocs/service"
<Directory "/opt/htdocs/service">
  AllowOverride All
  Options -Indexes FollowSymLinks
</Directory>

还有我的/opt/htdocs/service目录的内容:

$>ls -1 /opt/htdocs/service

  ca.php

Mod_rewrite 已启用:

$>a2enmod rewrite

  Module rewrite already enabled

提前致谢!

【问题讨论】:

    标签: php apache url rest mod-rewrite


    【解决方案1】:

    尝试将其放入您的服务器/虚拟主机配置或文档根目录中的 htaccess 文件中:

    RewriteEngine On
    
    RewriteRule ^/?service/ca;(.*)$ /service/ca.php?$1 [L]
    
    RewriteCond %{QUERY_STRING} ^(.*),(.*)$
    RewriteRule ^/?serivce/ca\.php$ /service/ca.php?%1&%2 [L]
    

    【讨论】:

    • http://www.myserver.com/service/ca;x=1,y=2,z=3 发出 GET 请求,我得到一个 404 响应代码:The requested URL /service/ca;x=1,y=2,z=3 was not found on this server. :-(
    • @claudiosparpaglione 这些规则是否在您文档根目录的 htaccess 文件中? mod_rewrite 是否打开/加载?您还有其他与这些冲突的规则吗?您是否在配置中的某处设置了 AllowOverride All
    • mod_rewrite 已正确启用。我将您的规则放入与 .php 脚本位于同一目录中的 .htaccess 文件中,而 .htaccess 仅包含那些。我已经设置 Apache 将目录映射到别名 (/service) 并且相关的 &lt;Directory&gt; 指令包含 AllowOverride All...
    • @claudiosparpaglione “与.php脚本在同一目录中的htaccess文件”,即不是文档根目录(我的回答说你必须把它们放在那里)。如果您不能将它们放在那里,则需要修改规则。文档根是/。如果你去http://www.myserver.com/,这就是你要去的地方。
    • 糟糕,抱歉,我错过了。我将 .htaccess 放入文档根目录,但不幸的是,我得到了相同的 404。我会尽快附加我的 Apache 配置
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2011-11-10
    • 2010-09-20
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多