2013-12-19 49 views
0

我在我的.htaccess网址重写中遇到了一些问题。他们在当地很好地工作,但出于某种原因,我不明白,他们不在我的服务器上工作。我能够像这样在index.php后加上问号,使我的第一个规则的工作(我也弄不明白为什么需要这个问号):我的服务器上的网址重写不起作用

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index\.php?/$1 [L] 

,但我仍然无法找到一种方法让这个规则在我的服务器上工作。

RewriteRule article/([a-zA-z0-9\-]+)-([0-9]+)/ article/$1/$2/ [L] 

你能告诉我我做错了什么,为什么它在本地工作,但不在我的服务器上?谢谢 !!

回答

0

我终于工作了这一点。我查看了服务器上的$ _SERVER变量,发现重写的url存储在$ _SERVER ['QUERY_STRING']中。不要问我为什么......

所以我使用这个变量而不是$ _SERVER ['PATH_INFO'],并且每件事情都能够再次完美地工作。 像这样的URL:/ article/lala-00000000164 /被无形地改写为:/ article/lala/00000000164 /。

感谢您的帮助!

0

我猜你需要问号,因为你的服务器没有设置处理PATH_INFO。但是,你需要的物品规则之前,你的其他规则:

RewriteRule article/([a-zA-z0-9\-]+)-([0-9]+)/ article/$1/$2/ [L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index\.php?/$1 [L] 
+0

谢谢,我已经试过,并且我得到/ article/lala/00000000164 /在这台服务器上找不到。所以我试过:article /([a-zA-z0-9 \ - ] +) - ([0-9] +)/ index.php?/ article/$ 1/$ 2/[L]。现在我被重定向到index.php,但重写不起作用。 $ _SERVER ['REQUEST_URI']表示url是/ article/lala-00000000164 /而不是/ article/lala/00000000164/ – user2588917

+0

@ user2588917你想让它重定向浏览器还是什么?因为$ _SERVER ['REQUEST_URI']'是浏览器请求的内容,而不是** mod_rewrite改变它的内容。 –

+0

嗨,是的,我想我明白我要去哪里错了。我在本地使用$ _SERVER ['PATH_INFO']。但是这个变量没有在我的服务器上设置。所以我用$ _SERVER ['REQUEST_URI']替换它,这就是问题的来源。使用$ _SERVER ['PATH_INFO'],像这样的URL:/ article/lala-00000000164 /被转换为/ article/lala/00000000164 /,所以我可以轻松解析它。但$ _SERVER ['REQUEST_URI']中的网址没有被转换...是否有任何我可以得到这个以我喜欢的方式工作? – user2588917