2013-03-02 45 views
-1

我在尝试重定向来自domain.com/sign-up/*的所有请求。到domain.com/sign-up/ 另外,我想知道我的代码是否可以改进,请参阅下文。使用mod_rewrite问题重定向

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteRule ^sign-up/(.*)\.php$ public/register.php [NC] 
RewriteRule ^sign-up/(.*) /sign-up/ [R] 
RewriteRule ^sign-up/\??lang=([a-zA-Z][a-zA-Z][a-zA-Z])$ public/register.php?lang=$1 [NC] 
RewriteRule ^sign-up/?$ public/register.php [NC,L] 

为什么不发生重定向?

+0

您必须共享所有要重写的URL的情况。否则,我们所提供的只是猜测。分享网址和流程。现在发生了什么,应该发生什么,现在网址如何,他们应该怎么做?! – Shef 2013-03-02 23:30:47

+0

嗨,目前一切工作正常,除了我在问题中提到的例子。不执行任何操作的RewriteRule是:“RewriteRule ^注册/(.*)/注册/ [R]”如果我理解正确,我会输入的所有内容,例如domain.com/sign-up/foo应该得到重定向(不重写)到domain.com/sign-up/ – 2013-03-02 23:34:51

+0

似乎没有效果。 – 2013-03-02 23:52:13

回答

1

试试这个,让我知道它是否有效。如果没有,请让我知道哪个网址不起作用。

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteBase/

# sign-up/xxx.php -> public/register.php 
RewriteRule ^sign-up/.*\.php$ public/register.php [L] 

# sign-up/xxx -> /sign-up/ 
RewriteRule ^sign-up/.+ /sign-up/ [R=301,QSA,L] 

# sign-up/?lang=xxx -> public/register.php?lang=xxx 
RewriteCond %{QUERY_STRING} .*lang=([a-z]{3}).* [NC] 
RewriteRule ^sign-up/$ public/register.php?lang=%1 [L,NC] 

# /sign-up/ -> public/register.php 
RewriteRule ^sign-up/?$ public/register.php [NC,L] 
</IfModule> 
+0

#注册/ xxx - > /注册/重写规则^注册/ .* /注册/ [L,R]看起来像我得到的结果一样,没有重定向发生。只重写。注册/ xxx应显示注册/在浏览器中uri – 2013-03-03 00:01:11

+0

@ user1614199现在怎么样? – Shef 2013-03-03 00:10:38

+0

同样的事情,它不重定向。是否有另一个基于正则表达式的htaccess重定向我可以使用? – 2013-03-03 11:33:26