2010-09-22 138 views
0

在Red Hat服务器上使用Apache,我试图从重写成员店的URL在我们的网站:Apache网址重写domain.com/custom_url_name

domain.com/store.php?url=12345 

到:

domain.com/12345 

利用这些规则,我可以得到它,如果我总是记得添加结束斜线工作:

Options -Indexes 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^store/url/(.*)$ store.php?url=$1 
RewriteRule ^(.*)/$ store.php?url=$1 

domain.com/12345/作品, 但domain.com/12345不起作用。

删除重写代码最后一行中的斜杠会破坏很多东西。有没有办法让这个工作既有或没有结束斜线?

+0

什么是消除斜线打破? – 2010-09-22 20:04:44

+0

页面不再加载。 – rwheindl 2010-09-22 20:26:28

回答

0

如果你做斜杠optional怎么办?此外,您可能要指定比(.*)更具体的内容,因为domain.com/a/b/c/d/e会匹配。相反,您可以使用否定的character class来指定斜线以外的所有内容。

RewriteRule ^([^/]*)/?$ store.php?url=$1 

或者,如果你只是想捕捉的数字,你可以使用\dshorthand class(匹配所有数字),与+其指定至少一位必须存在一起:

RewriteRule ^(\d+)/?$ store.php?url=$1 
+0

嗯。猜猜这已经变成了一个更复杂的正则表达式。我正在尝试使用任何单词字符,然后选择可选的超文本字符和可选的其他单词字符。我认为这种模式是:[\ w] + [ - \ w] +? – rwheindl 2010-09-22 20:28:51

+0

'\ w +( - \ w +)*'可能是您正在寻找的东西(假设您不需要连续破折号)。如果您在重写规则的另一方面遇到更多麻烦,请随时发起另一个问题。 – 2010-09-22 20:35:16

+0

是的,就是这样。谢谢。 – rwheindl 2010-09-22 21:17:33

0

您尝试使用^(.*)$失败,因为它会匹配任何URL路径。使用更具体的模式比.*,也许\d+只允许一个或多个数字:

RewriteRule ^(\d+)$ store.php?url=$1