使用Mod_rewrite结束期间

时间:2009-12-16 16:44:26

标签: .htaccess mod-rewrite punctuation

我想知道如何在我的网址上留出句号。目前,如果我有网址:

http://www.mydomain.com/Page/I.D.K

抓取信息的页面将返回

标题:I.D.K(没有结束期)

这也会在其他标点符号中发生,并且会影响我的页面错误地显示信息。谢谢你的期待,希望有人知道解决方案。

我在htaccess文件中使用以下内容:

RewriteRule ^([^/.]+)/?$ /index.php?Page=$1 [L]
RewriteRule ^([^/.]+)/([^/]+)/?$ /index.php?Page=$1&Level1=$2 [L]
RewriteRule ^([^/.]+)/([^/]+)/([^/]+)/?$ /index.php?Page=$1&Level1=$2&Level2=$3 [L]
RewriteRule ^([^/.]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?Page=$1&Level1=$2&Level2=$3&Level3=$4 [L]

2 个答案:

答案 0 :(得分:1)

好的问题几乎解决了。如果我尝试&Artist1 & Artist2仍然会破坏我的字符串,但我会使用字符串替换来替换该符号。无论如何,为了在任何地方允许标点符号,即使在最后,我在重写规则中用+替换了所有*。以下是它现在的样子:

RewriteRule ^([^/.]*)/?$ /index.php?Page=$1 [L]
RewriteRule ^([^/.]*)/([^/]*)/?$ /index.php?Page=$1&Level1=$2 [L]
RewriteRule ^([^/.]*)/([^/]*)/([^/]*)/?$ /index.php?Page=$1&Level1=$2&Level2=$3 [L]
RewriteRule ^([^/.]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?Page=$1&Level1=$2&Level2=$3&Level3=$4 [L]

希望这有助于其他有类似问题的人。

答案 1 :(得分:0)

我假设它位于http://www.mydomain.com/。这是我用于第二条规则的内容(然后可以转换为其他规则):

RewriteRule ^([A-Za-z0-9\-,]+)/([A-Za-z0-9.\-,]+)/?$ /index.php?Page=$1&Level1=$2 [L]

这将匹配以下内容:(并且将允许连字符,逗号和Level1的句点)

IDK/Jump.ing.
IDK/Jump.ing./

但不是:

S$!LV/J

我尝试将我的选项列入白名单(类似/[A-Z]/),而不是将它们列入黑名单(/[^3-5]/)。我确信这两个选项都有争议,但我喜欢白名单主要是因为我可以控制可以使用的内容。如果我没有将它包含在我的列表中,那么它不是一个有效的选项。当然,如果您接受了很多选项,那么这可能会产生一些非常长的角色类或诸如此类的东西。如果有人去http://www.mydomain.com/Page/I.D.K.&somevariable=somevalue怎么办?它可能会破坏你的脚本(如果这个人很聪明)。您的RewriteRule会将它们发送到/index.php?Page=Page&Level1=I.D.K.&somevariable=somevalue。根本不是你预期的事情。