Php htaccess将错误重定向到子目录

Php htaccess将错误重定向到子目录,php,.htaccess,mod-rewrite,redirect,Php,.htaccess,Mod Rewrite,Redirect,尝试重定向此始终有效: RewriteRule ^user/(.*) view_channel.php?user=$1 [nc] 问题是,试图单独重定向下面的语句,但当与上面的语句组合时,它不起作用(结果是一个空白页): 有关.htaccess的更多详细信息: Options All -Indexes FileETag MTime Size Options +FollowSymlinks -MultiViews RewriteEngine on <FilesMatch "\.(db|i

尝试重定向此始终有效:

RewriteRule ^user/(.*) view_channel.php?user=$1 [nc]
问题是,试图单独重定向下面的语句,但当与上面的语句组合时,它不起作用(结果是一个空白页):

有关.htaccess的更多详细信息:

Options All -Indexes
FileETag MTime Size
Options +FollowSymlinks  -MultiViews
RewriteEngine on
<FilesMatch "\.(db|inc|tmpl|h|ihtml|sql|ini|configuration|config|class|bin|spd|theme|module|cfg|cpl|tmp|log|err|inc.php|class.php)$">
order allow,deny
satisfy all
</FilesMatch>
选项所有-索引
FileTag MTime大小
选项+以下符号链接-多视图
重新启动发动机
命令允许,拒绝
满足所有

我做错了什么?

这些规则并不是互不兼容的。它们也不是最终的。像这样改变它们:

RewriteRule ^user/([^/]+) view_channel.php?user=$1 [NC,L]
RewriteRule ^user/videos/([^/]+) user_videos.php?user=$1 [NC,L]
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^user/videos/([^/]+)/?$ user_videos.php?user=$1 [L,NC,QSA]
RewriteRule ^user/([^/]+)/?$ view_channel.php?user=$1 [L,QSA,NC]

[^/]+
匹配一个或多个非
/
字符。这确保了第一个规则不能与第二个模式相匹配,而第二个模式是与
*
匹配的,因为这会匹配任何字符,当然包括
/

这些规则并不是互不兼容的。它们也不是最终的。像这样改变它们:

RewriteRule ^user/([^/]+) view_channel.php?user=$1 [NC,L]
RewriteRule ^user/videos/([^/]+) user_videos.php?user=$1 [NC,L]
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^user/videos/([^/]+)/?$ user_videos.php?user=$1 [L,NC,QSA]
RewriteRule ^user/([^/]+)/?$ view_channel.php?user=$1 [L,QSA,NC]

[^/]+
匹配一个或多个非
/
字符。这确保了第一个规则不能与第二个模式相匹配,而第二个模式是与
*
匹配的,因为它匹配任何字符,当然包括
/

这是因为您的正则表达式
^user/(.*)
也匹配类似于
/user/videos/something
的URI

你的规则是这样的:

RewriteRule ^user/([^/]+) view_channel.php?user=$1 [NC,L]
RewriteRule ^user/videos/([^/]+) user_videos.php?user=$1 [NC,L]
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^user/videos/([^/]+)/?$ user_videos.php?user=$1 [L,NC,QSA]
RewriteRule ^user/([^/]+)/?$ view_channel.php?user=$1 [L,QSA,NC]

这是因为您的正则表达式
^user/(.*)
也匹配一个URI,如
/user/videos/something

你的规则是这样的:

RewriteRule ^user/([^/]+) view_channel.php?user=$1 [NC,L]
RewriteRule ^user/videos/([^/]+) user_videos.php?user=$1 [NC,L]
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^user/videos/([^/]+)/?$ user_videos.php?user=$1 [L,NC,QSA]
RewriteRule ^user/([^/]+)/?$ view_channel.php?user=$1 [L,QSA,NC]

第二个
RewriteRule
语句与已重写的url匹配。

第二个
RewriteRule
语句与已重写的url匹配。

@anubhava,但是你更快了,并且为规则添加了更多细节,因此你应该得到投票。zx81:10分钟前回答。anubhava:9分钟前回答。@anubhava,但是你更快,并且在规则中添加了更多细节,所以你应该得到投票。zx81:10分钟前回答。阿努巴瓦:9分钟前回答。附加条件等+1。总是向你学习如何做得更好。:)+1对于附加条件等,始终向您学习如何做得更好。:)