我有四种不同类型的重写,我试图在每个重写中使用多个参数。
首先是没有修改的网址:
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/
Run Code Online (Sandbox Code Playgroud)
接下来,我希望能够在浏览器中输入:
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/
Run Code Online (Sandbox Code Playgroud)
最后,我尝试过的,以及无数的变化:
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]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法很好地处理 p 参数:
RewriteRule ^([a-zA-Z0-9-/+]+)$ index.php?p=/$1 [L]
Run Code Online (Sandbox Code Playgroud)
然而,其他一切都完全脱离了我。我觉得我已经很接近了,但这令人非常沮丧,因为我不知道有什么方法可以缩小问题的范围。它要么有效,要么无效。提前致谢。
给你:(请注意,这会去除pn
变量的尾随“/”)
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]
Run Code Online (Sandbox Code Playgroud)
...以及一个用于简化测试的 PHP 文件:
<html><head><title>Testing</title></head><body><pre><?php
var_dump($_GET);
echo "\r\n";
var_dump($_SERVER);
?></pre></body></html>
Run Code Online (Sandbox Code Playgroud)
更新:如果您计划使用变量类别名称并且无法保证该/
字符将用作分隔符,则您应该考虑在应用程序本身中处理 URI 解析。
重写指令示例:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
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;
}
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44496 次 |
最近记录: |