首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用mod_rewrite重写RESTful URL以提供RESTful URL

用mod_rewrite重写RESTful URL以提供RESTful URL
EN

Stack Overflow用户
提问于 2010-03-18 02:56:16
回答 3查看 1K关注 0票数 3

web服务器是Apache。我想重写URL,这样用户就不会知道实际的目录。例如:原始URL:

www.mydomainname.com/en/piecework/piecework.php?piecework_id=11

预期URL:

Piework.mydomainname.com/en/11

我在.htaccess中添加了以下语句:

代码语言:javascript
复制
RewriteCond %{HTTP_HOST} ^(?!www)([^.]+)\.mydomainname\.com$ [NC]
RewriteRule ^(w+)/(\d+)$ /$1/%1/%1.php?%1_id=$2 [L]

当然,我用我的域名代替了我的域名。.htaccess放在站点根目录中,但是当我访问piework.mydomainname.com/en/11时,我得到了“对象未找到”(当然,我用我的域名替换了mydomainname )。

我在.htaccess中添加了以下语句:

代码语言:javascript
复制
RewriteRule ^/(.*)/en/piecework/(.*)piecework_id=([0-9]+)(.*) piecework.mydomainname.com/en/$3

当然,我用我的域名代替了我的域名。.htaccess放在站点根目录中,但是当我访问piework.mydomainname.com/en/11时,我得到了“对象未找到”(当然,我用我的域名替换了mydomainname )。

怎么了?

EN

回答 3

Stack Overflow用户

发布于 2010-08-04 00:40:02

尝试在vhost或server中使用RewriteLog,以检查重写过程。现在,您似乎只是猜测mod_rewrite所做的事情。

通过使用RewriteLogLevel,可以修改日志记录的扩展。首先,我推荐第5级。

PS:修改配置后,不要忘记重新加载/重新启动服务器。

票数 2
EN

Stack Overflow用户

发布于 2010-03-18 03:10:28

你在倒着做。这个想法是,你会给人们友好的地址,重写规则会将请求指向这个友好的、不存在的页面到真正的页面,而他们却看不到它。所以现在只有当他们进入丑陋的URL时,它才能处理好该做什么,但是您正在输入友好的URL。由于在人们直接放置友好URL时不存在规则,apache会查找它并说“对象未找到”

因此,增加一行:

代码语言:javascript
复制
RewriteRule piecework.mydomainname.com/en/(*.) ^/$3/en/piecework/$3?piecework_id=([0-9]+)(.*)

对不起,这是非常正确的,但基本的想法是,如果他们放入您喜欢的URL,Apache就可以重定向到真正的页面,而浏览器不会看到它。

更新

我很困才能正确地做regex,所以我已经尽了最大的努力让你的例子四处走动,对不起。首先,我会尝试一些更简单的东西,先把基本概念弄下来。试试这个:

代码语言:javascript
复制
RewriteRule www.mydomainname.com/en/piecework/piecework\.php\?piecework_id\=11 piecework.mydomainname.com/en/11

至少,如果您遇到错误,就更容易看出什么不起作用了。

票数 0
EN

Stack Overflow用户

发布于 2010-03-18 03:11:31

下面是对正在发生的事情的简要概述:

代码语言:javascript
复制
RewriteCond %{HTTP_HOST} ^(?!www)([^.]+)\.mydomainname\.com$ [NC]

首先,问号应该在结尾。

$1应该匹配任何不是'www‘0或1次的东西。

$2匹配任何不是字符1或更多次的东西,理论上这将匹配一个空白,但很可能永远不会匹配任何东西。

然后,在这两个组之后,它需要'.mydomainname.com‘。

您的前两个条件是寻找两个独立的分组。

我不清楚您是如何设置您的结构的,但是下面是我如何根据您最初的和预期的URL来编写它:

代码语言:javascript
复制
RewriteCond %{HTTP_HOST} !^www\.mydomainname\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(\w+)\.mydomainname\.com$ [NC]
RewriteRule ^(\w+)/(\d+)$ /$1/%1/%1.php?%1_id=$2 [L]

基本上,您的第一个条件是确保它不是以'www‘开头的URL (让它成为一个单独的规则就更容易了)。第二个条件是检查可能出现在域名前面的任何单词。然后重写规则将适当地重定向它。

去掉你问题中的最后一条.htaccess线.

如果我打错了,请谁来纠正我。我不记得你是否必须在“w”和“d”前面加上“\”,但我还是把它们包括在内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2467302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档