htaccess URL重写不适用于第一个规则

时间:2014-03-25 13:56:24

标签: php apache .htaccess mod-rewrite

我为我的博客设置了以下规则,它们似乎工作正常。

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/(index\.php|(modules|css|files|fonts|ico|img|js)/)

RewriteRule ^([^/]*)/page/([^/]*)$ /framework/?p=$1&page=$2 [L]
RewriteRule ^([^/]*)/search/([^/]*)$ /framework/?p=$1&search=$2 [L]
RewriteRule ^([^/]*)/search/([^/]*)/page/([^/]*)$ /framework/?p=$1&search=$2&page=$3 [L]

所以我感到自信,并希望为基本页面添加一条规则。

所以我添加了这个规则

RewriteRule ^([^/]*)$ /framework/?p=$1 [L]

这样我的htaccess文件现在看起来像这个

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/(index\.php|(modules|css|files|fonts|ico|img|js)/)

RewriteRule ^([^/]*)$ /framework/?p=$1 [L]
RewriteRule ^([^/]*)/page/([^/]*)$ /framework/?p=$1&page=$2 [L]
RewriteRule ^([^/]*)/search/([^/]*)$ /framework/?p=$1&search=$2 [L]
RewriteRule ^([^/]*)/search/([^/]*)/page/([^/]*)$ /framework/?p=$1&search=$2&page=$3 [L]

但是,如果我转到http://www.example.com/framework/blog,如果我取出该行并转到500 Internal Server Error,我会收到http://www.example.com/framework/blog/page/2,但它会加载我的第二页而没有任何问题。

我不确定我做错了什么?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用:

Options +FollowSymLinks

RewriteEngine On
RewriteBase /framework/

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

RewriteRule ^([^/]+)/page/([^/]*)$ ?p=$1&page=$2 [L,QSA]
RewriteRule ^([^/]+)/search/([^/]*)/page/([^/]*)$ ?p=$1&search=$2&page=$3 [L,QSA]
RewriteRule ^([^/]+)/search/([^/]*)$ ?p=$1&search=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ ?p=$1 [L,QSA]