使用mod重写

时间:2018-04-10 18:45:38

标签: .htaccess mod-rewrite

我觉得我对mod重写有一个很好的处理,但我似乎无法让这个工作。

我的设置:如果页面实际存在(即contact.php),则加载“真实”页面。否则,假设网址是一个带有SEO友好网址的博客条目,并将该网址作为查询字符串提供给我的索引页。

示例:http://www.example.org/my_latest_post应重写为http://www.example.org/index.php?blogurl=my_latest_post

如果我将“丑陋”的网址粘贴到浏览器中,页面加载就可以了。但如果我运行SEO友好网址,我会得到可怕的404。

我的htaccess文件现在实际上很轻。一些缓存内容,管道XML到PHP(用于动态RSS提要),自定义404文档。

以下是相关的mod_rewite内容:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9]+[-]+[A-Za-z0-9]+)+[/])$  index.php?blogurl=$1    [NC,L]

据我所知,我说如果文件名是实际文件或目录的一部分,那么就让它站起来。我的其他页面都正常工作,所以这似乎有效。

然后,其他一切都应该被认为是SEO网址的一部分,并传递给index.php?blogurl = [网址]。

但那不起作用。

我忽略了什么愚蠢的事情

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

保持简单并使用此规则:

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([\w-]+)/?$ index.php?blogurl=$1 [QSA,L]

[\w-]将匹配[a-zA-Z0-9_-]个字符。