2010-03-17 93 views
0

Web服务器是Apache。我想重写URL,以便用户不会知道实际的目录。例如: 的原始网址:使用mod_rewrite在PHP中重写URL

http://www.example.com/en/piecework/piecework.php?piecework_id=11 

预期网址:

http://piecework.example.com/en/11 

如何使用mod_rewrite实现呢?

+0

无关用PHP。你想要的功能都是使用.htaccess文件。直到重定向之后,PHP才会处理一件事情。我会帮忙,但我没有鼠标(使用这个废话触摸板),并要睡觉。 – animuson 2010-03-17 09:06:31

+0

感谢您的编辑。 – Steven 2010-03-17 09:08:31

回答

0

您需要定义一个重写规则(应该是与此类似):

RewriteRule ^/(.*)/en/piecework/(.*)piecework_id=([0-9]+)(.*) piecework.mydomainname.com/en/$3 

,并把它放在一个.htaccess文件,你的主文件夹网站的重写规则

全面介绍下在这里:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

编辑

发错在我的规则,hopef ully我纠正了它。

+0

'/en/piecework/piecework.php?soemthing = 10&piecework_id = 11&somethingelse = 12'如何? – Amarghosh 2010-03-17 09:14:06

+0

$ 3或$ 2是什么意思? – Steven 2010-03-17 09:17:33

+0

Thankyou指出错误。 @Steven $ 2表示您通过解析字符串得到的第二组reg-ex,即:第二个(。*)实际上您需要的是([0-9] +),它是第三组由$ 3指定 – OverLex 2010-03-17 09:18:05

0

我发现了一个非常良好的书面速成班在这样的位置:
http://articles.sitepoint.com/article/guide-url-rewriting

你需要指定的.htaccess规则(在你的站点根目录)。

+0

我在.htaccess中指定了规则(RewriteRule^/(。*)/ en/piecework /(.*)piecework_id =([0-9] +)(。*)piecework.mydomainname.com/en/$3) (在我的网站根目录),但是当我访问http://piecework.mydomainname.com/en/11时,我得到了“找不到对象”。 – Steven 2010-03-18 02:07:29

0

我建议以下规则:

RewriteCond %{HTTP_HOST} ^(?!www)([^.]+)\.mydomainname\.com$ [NC] 
RewriteRule ^(w+)/(\d+)$ /$1/%1/%1.php?%1_id=$2 [L] 
+0

RewriteRule ^(w +)/(\ d +)$/$ 1/%1 /%1.php?%1_id = $ 2 [L] ).htaccess(在我的网站根目录),但是当我访问piecework.mydomainname.com/en/11时,我得到了“找不到对象”。什么是错误? – Steven 2010-03-18 02:08:54

+0

对不起,我做了一个印刷错误。像这样试一下: RewriteCule%{HTTP_HOST} ^(?! www)([^。] +)\。mydomainname \ .com $ [NC] RewriteRule ^(\ w +)/(\ d +)$/$ 1/%1 /%1.php?%1_id = $ 2 [L] – TonyCool 2010-03-18 15:16:07