【问题标题】:htaccess, detect urls without dot, dash, slash, spaces or underscorehtaccess,检测不带点、破折号、斜线、空格或下划线的网址
【发布时间】:2013-11-12 23:00:26
【问题描述】:

我们需要在 htaccess 上创建一个规则,该规则将根据 url 重定向页面。如果路径或 url 的最后一部分只有字母或数字,没有下划线、点、斜线或破折号,我们希望使用找到的字符串并将其作为参数发送到另一个 php 页面,该页面将决定如何使用它。

类似这样的:

假设/^([^\.,\-,\_,\/]+) 表示除'.', '-', '_', '/' and spaces 之外的所有内容

RewriteRule /^([^\.,\-,\_,\/]+)$ handler.php?alias=$1 [L]

其中 $1 将给我们一个仅包含字母和数字的字符串。

例如:

mysite.com/someone = handler.php?alias=someone

mysite.com/styles.css   or   mysite.com/images/logo.jpg   or   mysite.com/page_2, etc

不会被重定向。

我真的迷失了正则表达式。有任何想法吗? 谢谢!

【问题讨论】:

  • ^ 表示主题的开始。但是您甚至在此之前就期待/;这是行不通的。此外,如果您只查找字母和数字,请使用 \w 而不是否定的 charclass。
  • \w 不包含空格,而他的表达式包含。
  • 也不应考虑空格!好点@JohannesH。谢谢,我会更新问题。
  • 这或多或少有点反问 - 网址中不应出现空格。
  • 有人能解释一下反对票吗,我想改进我将来提出问题的方式,谢谢。

标签: php regex .htaccess


【解决方案1】:

你试过了吗?

RewriteRule ^([a-zA-Z0-9]+)$ handler.php?alias=$1 [L]

RewriteRule ^([a-z0-9]+)$ handler.php?alias=$1 [NC,L]

RewriteRule ^[a-z0-9]+$ handler.php?alias=$0 [NC.L]

【讨论】:

  • 与原始问题相同:您从开头 (^) 到结尾 ($) 匹配,并且不能有非单词字符 - 情况并非如此.它只是应该匹配的最后一个/ 之后的部分。
  • @JohannesH。 - 你说的不对,site.com/url RewriteRule 只会在命令的左边带上url
  • 是的,因为域不是所使用路径的一部分。使用site.com/test/me 但是你的表达式不会匹配任何东西,但它应该匹配me
  • @JohannesH。 - 再次阅读问题...它说mysite.com/styles.css or mysite.com/images/logo.jpg or mysite.com/page_2, etc will not be redirected.。明白了吗?
  • 所以?这不是关于子目录内文件的信息。但这里没有必要争论。这个答案仍然存在,所以谁读它可以自己决定。天哪,我们不在幼儿园了。
【解决方案2】:

试试

RewriteRule ^.*([^\/\.\-_]+)$ handler.php?alias=$1

[编辑]:如果你不想匹配空格(那不应该出现在 URL 中,所以商店甚至没有任何区别,但仍然 ^^),做

RewriteRule ^.*(\w+)$ handler.php?alias=$1

【讨论】:

  • 当然,这就是我不想要空格的原因! :D 谢谢,我会试试的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2010-10-07
  • 1970-01-01
  • 2015-08-13
  • 2010-11-19
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多