我刚刚继承了一个网站,其中当前的重定向规则如下:
RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?page=$1
这很有效。
现在,我添加了一个视频部分,我希望能够拥有以下网址:www.site.com/videos/1
,www.site.com/videos/2
等...
为了完成这项工作,我将重写规则更改为:
RewriteRule ^/?test/([^/d]+)/?$ index.php?page=test&vid=$1
RewriteRule ^([^/]+)/?$ index.php?page=$1 [L,QSA]
这使得一切都运行得非常好,但并非所有内容都以/index.php?page=$1
的形式出现。例如,有一些独立的脚本,例如/print.php?page=receipt&order_id=2014032513533714
,我的新重写规则会破坏它。
有哪些适当的重写规则可以捕获/
和/index.php?page=$1
并将其重定向到/
和/calendar
,/videos
,/videos/1
等但也能够接受/print.php?etc
,/sync.php?etc
等独立脚本?
答案 0 :(得分:2)
您需要跳过现有文件/目录:
RewriteRule ^/?test/([^/d]+)/?$ index.php?page=test&vid=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?page=$1 [L,QSA]
答案 1 :(得分:0)
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|public|static|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]