mod_rewrite问题(多个斜杠地址?)

时间:2015-05-27 00:36:19

标签: php regex .htaccess mod-rewrite

我不是正则表达式专家,我正试图在网站上实现一个社交登录系统,该系统可能会也可能不会将用户重定向到登录之前的页面。

像这样,没有重定向:

RewriteRule ^login/([^/]+)$ login.php?p=$1 [L]

http://example.com/login/Facebook>>页面完成它并转到索引(默认行为)。

或类似用于重定向(p = provider; r =重定向相对路径):

RewriteRule ^login/([^/]+)/([^/]+)$ login.php?p=$1&r=$2 [L]

如果用户位于由以下规则生成的http://example.com/info之类的网页上,则效果很好:

RewriteRule ^info$ users_infosystem.php [L]

当用户在http://example.com/gallery/galleryname

这样的网页上时,我遇到了问题
RewriteRule ^gallery/([^/]+)$ galery.php?name=$1 [L]

任何帮助?

编辑:发生在我身上......我不知道$ char是否是标记结束的分隔符并将其取消使得规则接受([^ /] +)位之后的每一项。< / p>

另外:([^ /] +)位是否与正斜杠相匹配?

1 个答案:

答案 0 :(得分:1)

  

当用户在

这样的网页上时,我遇到了问题

这是一个非常含糊的句子。你实际上并没有说出问题所在。你的规则怎么办?也没有粘贴你的整个htaccess文件,你粘贴了点点滴滴,所以我们甚至不知道你的规则是什么顺序或者是否有其他规则。

我没有看到这些规则的问题。这些规则应该有效。他们都匹配不同的东西。您也可以使用后面的/?作为可选项。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^login/([^/]+)/([^/]+)/?$ login.php?p=$1&r=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^login/([^/]+)/?$ login.php?p=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^info/?$ users_infosystem.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^gallery/([^/]+)/?$ galery.php?name=$1 [L]

最后一条规则最后会与http://example.com/gallery/galleryname匹配,而不是/