htaccess重定向到错误的页面方向

时间:2012-11-29 16:57:15

标签: php .htaccess url-rewriting

这是我的htaccess代码:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine on

RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /Songs/Songs\.php\?movie=([^&\ ]+)([^\ ]*)
RewriteRule ^/Songs/%3?%4 [L,R=301]

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


</IfModule>

它像

一样完全重定向

来自

localhost/Songs/Songs.php?movie=anymovie-2012

localhost/Songs/anymovie-2012

但是当我尝试

localhost/Songs/<anytext>

例如。

localhost/Songs/test

然后它也调用songs.php而不是抛出找不到页面的错误。

如果数据库中没有最后一个关键字,如何抛出Page not Found Error。

对于解决方案,

我是否需要在songs.php文件或.htaccess文件中编码以及我需要执行哪种类型的代码?

1 个答案:

答案 0 :(得分:1)

您需要更加具体地了解应该重定向的格式;例如

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^[a-z0-9]+\-[0-9]{4}(\-[a-z0-9]+)?$
RewriteRule ^/?Songs/(.*)$ /Songs/Songs.php?movie=$1 [L,QSA]

应该有效。新行需要标题短划线年份,其中标题只能包含小写字母和数字,年份必须是四个数字,后跟一个可选的字母和数字字符串。