虚荣URLS:mod_rewrite和SQL查询返回坏标记分隔符错误

时间:2013-09-10 20:31:34

标签: php .htaccess url mod-rewrite vanity-url

我正在使用一种非常简单的方法在我的网站上启用虚荣URL,但是,我得到 500服务器错误。

我想启用这样的网址:mysite.com/ben而不是mysite.com/profile.php?id=2

这是我在htaccess文件中使用的代码:

RewriteCond %{REQUEST_FILENAME}.php -f  
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteCond %{REQUEST_FILENAME} >""
RewriteRule ^([^\.]+)$ profile.php?username=$1 [L]</pre>

这是profile.php顶部的查询:

$getName = explode("/",$_SERVER['REQUEST_URI']);
$result = query("SELECT * FROM users WHERE username='$getName[3]'");  
if (count($result) == 0)
 {
    header ('Location:404.php'); 
 }

现在,使用此脚本,我尝试访问的任何页面上都出现500服务器错误。 在我的Apache错误日志中,我可以看到: RewriteRule:bad flag delimiters

这是什么意思?

3 个答案:

答案 0 :(得分:1)

RewriteCond %{REQUEST_FILENAME}.php -f

-f标志后,此行末尾有额外的空格。

答案 1 :(得分:1)

尝试用以下代码替换.htaccess代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/?$ profile.php?username=$1 [L,QSA]

答案 2 :(得分:1)

好的,这听起来有些愚蠢,但看看你在这里发布的链接:http://culttt.com/2011/11/16/how-to-make-vanity-urls-using-php-htaccess-and-mysql/

示例末尾的</pre>将导致500服务器错误。并且,毫不奇怪,当我查看我的错误日志时,它说:

 /var/www/localhost/htdocs/.htaccess: RewriteRule: bad flag delimiters

请删除</pre>并将&gt;更改为>