.htaccess for index.php?page = $ 1和其他页面

时间:2014-03-26 18:59:47

标签: apache .htaccess mod-rewrite

我刚刚继承了一个网站,其中当前的重定向规则如下:

RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?page=$1

这很有效。

现在,我添加了一个视频部分,我希望能够拥有以下网址:www.site.com/videos/1www.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等独立脚本?

2 个答案:

答案 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]