【问题标题】:Rewrite URL Parameter containing dot重写包含点的 URL 参数
【发布时间】:2013-06-05 09:27:30
【问题描述】:

我认为我正在努力实现一个不可能的结果。

场景是 PURL-Mailing,我已经重写了一些 URL 以适应 URL,发送给客户。

客户通过以下域进入网站:http://domain.com/用户名

变量UserName代表GET-Variable,相当于http://domain.com/index.php?user=UserName

我通过以下重写规则实现了这一点:

RewriteBase /

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?name=$1  [QSA] 
#This works perfect and translates to http://domain.com/UserName

RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?name=$1 [L] 
#This achieves the goal but does not reflect in the URI I want:
#http://domain.com/UserName

更进一步,还有一些名称中包含点的名称,例如 A.Jackson,也需要被视为 UserName。由于这些只有 13 个名称,我可以手动实现它们。我不知道如何防止将 dot 之后的部分作为文件扩展名处理。有没有办法在 *mod_rewrite* 中为那些编写自定义句柄? 如果是这样,有人可以向我解释一下吗?

提前致谢并致以最诚挚的问候!

【问题讨论】:

  • 在你的正则表达式中添加点[a-zA-Z0-9_-.]
  • 嘿罗伯特,谢谢,但这会导致内部服务器错误。不适合我!
  • 因为点需要用\转义

标签: php .htaccess get rewrite


【解决方案1】:

好的,下面试试

RewriteCond %{REQUEST_FILENAME} !(img|要忽略的任何其他文件夹|要忽略的任何其他文件夹|...) RewriteCond %{SCRIPT_FILENAME} !-f 重写规则 ^([a-zA-Z0-9_-]*[\.]*[a-zA-Z0-9_-]+)[/]*$ test.php?name=$1 [L]

用您要忽略的文件夹名称替换“您要忽略的任何其他文件夹”。用'|'分隔每个文件夹

当您使用 URL 重写功能时,您还必须提供您网页中使用的 CSS、图像或任何其他链接的完整路径

【讨论】:

  • 完美答案!非常感谢你的支持! :)
【解决方案2】:

这是你的解决方案

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]*[\.]*[a-zA-Z0-9_-]+)$ index.php?name=$1  [L]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 2012-04-23
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多