我一直在试图在过去的几个小时里创build一些重写规则,而且我失败了。 如果有人能帮忙,我会非常感激。
我有四个不同types的重写,我试图做与每个参数中的多个。
首先,没有修改的url:
http://www.example.com/index.php?p=/category/page-slug&pn=2/ http://www.example.com/index.php?p=/category/&f=feed/rss (feed, feed/, feed/rss, feed/atom are the only possible values for the f parameter) http://www.example.com/index.php?p=tag&t=tag-one+tag-two+-tag-three&pn=2/ http://www.example.com/index.php?p=search&q=search+query+goes+here&pn=2/
接下来,我希望能够在浏览器中input:
http://www.example.com/category/page-slug/2/ http://www.example.com/category/feed/rss http://www.example.com/tags/tag-one+tag-two+-tag-three/2/ http://www.example.com/search/search+query+goes+here/2/
最后,我尝试了以及无数的变化:
RewriteRule ^([a-zA-Z0-9-/+]+)([0-9]+)$ index.php?p=/$1&pn=$2/ [L] RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)$ index.php?p=/$1&f=$2/ [L] RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)([0-9]+)$ index.php?p=/$1&t=$2&pn=$3/ [L] RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)([0-9]+)$ index.php?p=/$1&q=$2&pn=$3/ [L]
我能够使用以下方式处理p参数:
RewriteRule ^([a-zA-Z0-9-/+]+)$ index.php?p=/$1 [L]
但是,其他一切都完全逃脱了我。 我觉得我很接近,但是令人难以置信的是,我不知道有什么办法缩小问题的范围。 它可以工作,也可以不工作。 提前致谢。
这里你去:(注意,这剥离了尾随“/”的pn
variables)
RewriteEngine on RewriteBase / RewriteRule ^category/(.*)/([0-9]+) index.php?p=/category/$1&pn=$2 [L] RewriteRule ^category/feed(.*) index.php?p=/category/&f=feed$1 [L] RewriteRule ^tags/(.*)/([0-9]+)/ index.php?p=$1&pn=$2 [L] RewriteRule ^search/(.*)/([0-9]+)/ index.php?p=search&q=$1&pn=$2 [L]
…和一个PHP文件来简化testing:
<html><head><title>Testing</title></head><body><pre><?php var_dump($_GET); echo "\r\n"; var_dump($_SERVER); ?></pre></body></html>
更新:如果你打算拥有可变类别名称,并且你不能保证/
字符将作为分隔符,你应该考虑在你的应用程序本身中处理URIparsing。
示例重写指令:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* /index.php [L,QSA]
示例PHP文件:
<?php $uri = $_SERVER['REQUEST_URI']; $uri_array = explode( "/", $uri ); switch ( $uri_array[0] ) { case '': /* serve index page */ break; case 'feed': switch ( $uri_array[1] ) { case 'atom': /* serve atom feed */ break; case 'rss': /* serve RSS feed */ break; default: /* default feed behavior */ break; } break; case 'tags': $tags = ($uri_array[1]) ? $uri_array[1] : ''; $page_number = ($uri_array[2]) ? $uri_array[2] : 1; /* tag display behavior */ break; default: $category = ($uri_array[1]) ? $uri_array[1] : ''; $page_number = ($uri_array[2]) ? $uri_array[2] : 1; /* category lookup behavior + return 404 if category not found */ break; } ?>