通常,您希望通过其 ID 而非标题来识别您的页面。客户总是会尝试在他们的页面标题中添加奇怪的字符,例如"
、/
、'
和。&
这些字符可以断开链接。
http://example.com/page/1234/the+official+ “我+饿了”/“我+口渴”+page
此重写规则应收集页面的 ID,然后添加其他任何内容作为第二个变量:
RewriteRule ^page/([0-9]+)/(.*)$ /page.php?id=$1&p=$2 [L]
如果你这样做,那么标题就变得纯粹是装饰性的,你可以添加更严格的过滤器来防止意外行为(例如,如果用户创建了名为 的页面the official "i'm hungry"/"i'm thirsty" page
,你可以将其转换为the-official-i-m-hungry-i-m-thirsy-page
URL,而不会影响你的网页内容。
例如,这两个链接都将您带到同一个地方:
http://stackoverflow.com/questions/12864634/htaccess-and-double-quotations-in-url
http://stackoverflow.com/questions/12864634/gibberishgibberishgibberish
如果您想强制用户访问具有正确标题的页面,则可以更新page.php
以从 URL 中获取 ID,然后将用户重定向到正确、美观的 URL。例如:
<?php
function ConvertTitle($title)
{
// Replace all non-alphanumeric characters with a dash (-)
return preg_replace($title, '%[^A-z0-9]+%', '-');
}
$id = $_GET['id'];
$title = getArticleTitleById($id);
// If the title isn't correct
if(ConvertTitle($title) != ConvertTitle($_GET['p'])
{
// Send the user to the correct Cosmetic URL, StackOverflow does something like this
$url = '/page/'.$id.'/'. ConvertTitle($title);
header("location: $url");
}
// load the page as normal
?>
但是,只要您通过页面的 ID 而不是名称加载内容,那么即使使用不正确的 URL,它也应该可以正常工作。