Changeset 1908
- Timestamp:
- 12/03/2004 02:38:11 AM (20 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/admin-functions.php
r1894 r1908 491 491 492 492 function save_mod_rewrite_rules() { 493 global $is_apache ;493 global $is_apache, $wp_rewrite; 494 494 $home = get_settings('home'); 495 495 if ( $home != '' && $home != get_settings('siteurl') ) { … … 507 507 $writable = false; 508 508 509 $permalink_structure = get_settings('permalink_structure'); 510 511 if ( strstr($permalink_structure, 'index.php') ) // If they're using 509 if ($wp_rewrite->using_index_permalinks()) 512 510 $usingpi = true; 513 511 else … … 515 513 516 514 if ( $writable && !$usingpi && $is_apache ) { 517 $rules = explode("\n", mod_rewrite_rules($permalink_structure));515 $rules = explode("\n", $wp_rewrite->mod_rewrite_rules()); 518 516 insert_with_markers($home_path.'.htaccess', 'WordPress', $rules); 519 517 } -
trunk/wp-admin/options-permalink.php
r1868 r1908 22 22 if (! empty($permalink_structure) ) 23 23 $permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']); 24 update_option('permalink_structure',$permalink_structure);24 $wp_rewrite->set_permalink_structure($permalink_structure); 25 25 } 26 26 … … 29 29 if (! empty($category_base) ) 30 30 $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']); 31 update_option('category_base',$category_base);31 $wp_rewrite->set_category_base($category_base); 32 32 } 33 33 } … … 35 35 $permalink_structure = get_settings('permalink_structure'); 36 36 $category_base = get_settings('category_base'); 37 38 get_date_permastruct();39 37 40 38 generate_page_rewrite_rules(); … … 45 43 $writable = false; 46 44 47 if ( strstr($permalink_structure, 'index.php') ) // If they're using45 if ($wp_rewrite->using_index_permalinks()) 48 46 $usingpi = true; 49 47 else … … 107 105 <form action="options-permalink.php" method="post"> 108 106 <p> 109 <textarea rows="5" style="width: 98%;" name="rules"><?php echo mod_rewrite_rules($permalink_structure); ?>107 <textarea rows="5" style="width: 98%;" name="rules"><?php echo $wp_rewrite->mod_rewrite_rules(); ?> 110 108 </textarea> 111 109 </p> -
trunk/wp-blog-header.php
r1904 r1908 19 19 20 20 // Fetch the rewrite rules. 21 $rewrite = rewrite_rules('matches');21 $rewrite = $wp_rewrite->wp_rewrite_rules(); 22 22 23 23 if (! empty($rewrite)) { -
trunk/wp-includes/classes.php
r1905 r1908 699 699 } 700 700 701 class WP_Rewrite { 702 var $permalink_structure; 703 var $category_base; 704 var $category_structure; 705 var $date_structure; 706 var $front; 707 var $prefix = ''; 708 var $index = 'index.php'; 709 var $matches = ''; 710 var $rewritecode = 711 array( 712 '%year%', 713 '%monthnum%', 714 '%day%', 715 '%hour%', 716 '%minute%', 717 '%second%', 718 '%postname%', 719 '%post_id%', 720 '%category%', 721 '%author%', 722 '%pagename%', 723 '%search%' 724 ); 725 726 var $rewritereplace = 727 array( 728 '([0-9]{4})', 729 '([0-9]{1,2})', 730 '([0-9]{1,2})', 731 '([0-9]{1,2})', 732 '([0-9]{1,2})', 733 '([0-9]{1,2})', 734 '([^/]+)', 735 '([0-9]+)', 736 '(.+?)', 737 '([^/]+)', 738 '([^/]+)', 739 '(.+)' 740 ); 741 742 var $queryreplace = 743 array ( 744 'year=', 745 'monthnum=', 746 'day=', 747 'hour=', 748 'minute=', 749 'second=', 750 'name=', 751 'p=', 752 'category_name=', 753 'author_name=', 754 'pagename=', 755 's=' 756 ); 757 758 function using_index_permalinks() { 759 if (empty($this->permalink_structure)) { 760 return false; 761 } 762 763 // If the index is not in the permalink, we're using mod_rewrite. 764 if (preg_match('#^/*index.php#', $this->permalink_structure)) { 765 return true; 766 } 767 768 return false; 769 } 770 771 function preg_index($number) { 772 $match_prefix = '$'; 773 $match_suffix = ''; 774 775 if (! empty($this->matches)) { 776 $match_prefix = '$' . $this->matches . '['; 777 $match_suffix = ']'; 778 } 779 780 return "$match_prefix$number$match_suffix"; 781 } 782 783 function page_rewrite_rules() { 784 $uris = get_settings('page_uris'); 785 786 $rewrite_rules = array(); 787 if( is_array( $uris ) ) 788 { 789 foreach ($uris as $uri => $pagename) { 790 $rewrite_rules += array($uri . '/?$' => "index.php?pagename=" . urldecode($pagename)); 791 } 792 } 793 794 return $rewrite_rules; 795 } 796 797 function get_date_permastruct() { 798 if (isset($this->date_structure)) { 799 return $this->date_structure; 800 } 801 802 if (empty($this->permalink_structure)) { 803 $this->date_structure = ''; 804 return false; 805 } 806 807 // The date permalink must have year, month, and day separated by slashes. 808 $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%'); 809 810 $this->date_structure = ''; 811 812 foreach ($endians as $endian) { 813 if (false !== strpos($this->permalink_structure, $endian)) { 814 $this->date_structure = $this->front . $endian; 815 break; 816 } 817 } 818 819 if (empty($this->date_structure)) { 820 $this->date_structure = $front . '%year%/%monthnum%/%day%'; 821 } 822 823 return $this->date_structure; 824 } 825 826 function get_year_permastruct() { 827 $structure = $this->get_date_permastruct($permalink_structure); 828 829 if (empty($structure)) { 830 return false; 831 } 832 833 $structure = str_replace('%monthnum%', '', $structure); 834 $structure = str_replace('%day%', '', $structure); 835 836 $structure = preg_replace('#/+#', '/', $structure); 837 838 return $structure; 839 } 840 841 function get_month_permastruct() { 842 $structure = $this->get_date_permastruct($permalink_structure); 843 844 if (empty($structure)) { 845 return false; 846 } 847 848 $structure = str_replace('%day%', '', $structure); 849 850 $structure = preg_replace('#/+#', '/', $structure); 851 852 return $structure; 853 } 854 855 function get_day_permastruct() { 856 return $this->get_date_permastruct($permalink_structure); 857 } 858 859 function get_category_permastruct() { 860 if (isset($this->category_structure)) { 861 return $this->category_structure; 862 } 863 864 if (empty($this->permalink_structure)) { 865 $this->category_structure = ''; 866 return false; 867 } 868 869 if (empty($this->category_base)) 870 $this->category_structure = $this->front . 'category/'; 871 else 872 $this->category_structure = $this->category_base . '/'; 873 874 $this->category_structure .= '%category%'; 875 876 return $this->category_structure; 877 } 878 879 function generate_rewrite_rules($permalink_structure = '', $forcomments = false) { 880 $feedregex2 = '(feed|rdf|rss|rss2|atom)/?$'; 881 $feedregex = 'feed/' . $feedregex2; 882 883 $trackbackregex = 'trackback/?$'; 884 $pageregex = 'page/?([0-9]{1,})/?$'; 885 886 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%')); 887 preg_match_all('/%.+?%/', $permalink_structure, $tokens); 888 889 $num_tokens = count($tokens[0]); 890 891 $index = $this->index; 892 $feedindex = $index; 893 $trackbackindex = $index; 894 for ($i = 0; $i < $num_tokens; ++$i) { 895 if (0 < $i) { 896 $queries[$i] = $queries[$i - 1] . '&'; 897 } 898 899 $query_token = str_replace($this->rewritecode, $this->queryreplace, $tokens[0][$i]) . $this->preg_index($i+1); 900 $queries[$i] .= $query_token; 901 } 902 903 $structure = $permalink_structure; 904 if ($front != '/') { 905 $structure = str_replace($front, '', $structure); 906 } 907 $structure = trim($structure, '/'); 908 $dirs = explode('/', $structure); 909 $num_dirs = count($dirs); 910 911 $front = preg_replace('|^/+|', '', $front); 912 913 $post_rewrite = array(); 914 $struct = $front; 915 for ($j = 0; $j < $num_dirs; ++$j) { 916 $struct .= $dirs[$j] . '/'; 917 $struct = ltrim($struct, '/'); 918 $match = str_replace($this->rewritecode, $this->rewritereplace, $struct); 919 $num_toks = preg_match_all('/%.+?%/', $struct, $toks); 920 $query = $queries[$num_toks - 1]; 921 922 $pagematch = $match . $pageregex; 923 $pagequery = $index . '?' . $query . '&paged=' . $this->preg_index($num_toks + 1); 924 925 $feedmatch = $match . $feedregex; 926 $feedquery = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); 927 928 $feedmatch2 = $match . $feedregex2; 929 $feedquery2 = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); 930 931 if ($forcomments) { 932 $feedquery .= '&withcomments=1'; 933 $feedquery2 .= '&withcomments=1'; 934 } 935 936 $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2, $pagematch => $pagequery); 937 938 if ($num_toks) { 939 $post = 0; 940 if (strstr($struct, '%postname%') || strstr($struct, '%post_id%') 941 || (strstr($struct, '%year%') && strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) { 942 $post = 1; 943 $trackbackmatch = $match . $trackbackregex; 944 $trackbackquery = $trackbackindex . '?' . $query . '&tb=1'; 945 $match = $match . '?([0-9]+)?/?$'; 946 $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1); 947 } else { 948 $match .= '?$'; 949 $query = $index . '?' . $query; 950 } 951 952 $rewrite = $rewrite + array($match => $query); 953 954 if ($post) { 955 $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite; 956 } 957 } 958 959 $post_rewrite = $rewrite + $post_rewrite; 960 } 961 962 return $post_rewrite; 963 } 964 965 /* rewrite_rules 966 * Construct rewrite matches and queries from permalink structure. 967 * Returns an associate array of matches and queries. 968 */ 969 function rewrite_rules() { 970 $rewrite = array(); 971 972 if (empty($this->permalink_structure)) { 973 return $rewrite; 974 } 975 976 // Post 977 $post_rewrite = $this->generate_rewrite_rules($this->permalink_structure); 978 979 // Date 980 $date_rewrite = $this->generate_rewrite_rules($this->get_date_permastruct()); 981 982 // Root 983 $root_rewrite = $this->generate_rewrite_rules($this->prefix . '/'); 984 985 // Comments 986 $comments_rewrite = $this->generate_rewrite_rules($this->prefix . 'comments', true); 987 988 // Search 989 $search_structure = $this->prefix . "search/%search%"; 990 $search_rewrite = $this->generate_rewrite_rules($search_structure); 991 992 // Categories 993 $category_rewrite = $this->generate_rewrite_rules($this->get_category_permastruct()); 994 995 // Authors 996 $author_structure = $this->front . 'author/%author%'; 997 $author_rewrite = $this->generate_rewrite_rules($author_structure); 998 999 // Pages 1000 $page_rewrite = $this->page_rewrite_rules(); 1001 1002 // Deprecated style static pages 1003 $page_structure = $this->prefix . 'site/%pagename%'; 1004 $old_page_rewrite = $this->generate_rewrite_rules($page_structure); 1005 1006 // Put them together. 1007 $this->rewrite = $page_rewrite + $root_rewrite + $comments_rewrite + $old_page_rewrite + $search_rewrite + $category_rewrite + $author_rewrite + $date_rewrite + $post_rewrite; 1008 1009 $this->rewrite = apply_filters('rewrite_rules_array', $this->rewrite); 1010 return $this->rewrite; 1011 } 1012 1013 function wp_rewrite_rules() { 1014 $this->matches = 'matches'; 1015 return $this->rewrite_rules(); 1016 } 1017 1018 function mod_rewrite_rules () { 1019 $site_root = str_replace('http://', '', trim(get_settings('siteurl'))); 1020 $site_root = preg_replace('|([^/]*)(.*)|i', '$2', $site_root); 1021 if ('/' != substr($site_root, -1)) $site_root = $site_root . '/'; 1022 1023 $home_root = str_replace('http://', '', trim(get_settings('home'))); 1024 $home_root = preg_replace('|([^/]*)(.*)|i', '$2', $home_root); 1025 if ('/' != substr($home_root, -1)) $home_root = $home_root . '/'; 1026 1027 $rules = "<IfModule mod_rewrite.c>\n"; 1028 $rules .= "RewriteEngine On\n"; 1029 $rules .= "RewriteBase $home_root\n"; 1030 $this->matches = ''; 1031 $rewrite = $this->rewrite_rules(); 1032 1033 $num_rules = count($rewrite); 1034 $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" . 1035 "RewriteCond %{REQUEST_FILENAME} -d\n" . 1036 "RewriteRule ^.*$ - [S=$num_rules]\n"; 1037 1038 foreach ($rewrite as $match => $query) { 1039 // Apache 1.3 does not support the reluctant (non-greedy) modifier. 1040 $match = str_replace('.+?', '.+', $match); 1041 1042 // If the match is unanchored and greedy, prepend rewrite conditions 1043 // to avoid infinite redirects and eclipsing of real files. 1044 if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) { 1045 //nada. 1046 } 1047 1048 if (strstr($query, 'index.php')) { 1049 $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n"; 1050 } else { 1051 $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n"; 1052 } 1053 } 1054 $rules .= "</IfModule>\n"; 1055 1056 $rules = apply_filters('rewrite_rules', $rules); 1057 1058 return $rules; 1059 } 1060 1061 function init() { 1062 $this->permalink_structure = get_settings('permalink_structure'); 1063 $this->front = substr($this->permalink_structure, 0, strpos($this->permalink_structure, '%')); 1064 $this->prefix = ''; 1065 if ($this->using_index_permalinks()) { 1066 $this->prefix = $this->index . '/'; 1067 } 1068 $this->category_base = get_settings('category_base'); 1069 unset($this->category_structure); 1070 unset($this->date_structure); 1071 } 1072 1073 function set_permalink_structure($permalink_structure) { 1074 if ($permalink_structure != $this->permalink_structure) { 1075 update_option('permalink_structure', $permalink_structure); 1076 $this->init(); 1077 } 1078 } 1079 1080 function set_category_base($category_base) { 1081 if ($category_base != $this->category_base) { 1082 update_option('category_base', $category_base); 1083 $this->init(); 1084 } 1085 } 1086 1087 function WP_Rewrite() { 1088 $this->init(); 1089 } 1090 } 1091 1092 // Make a global instance. 1093 if (! isset($wp_rewrite)) { 1094 $wp_rewrite = new WP_Rewrite(); 1095 } 1096 701 1097 ?> -
trunk/wp-includes/functions.php
r1900 r1908 1306 1306 } 1307 1307 1308 function using_index_permalinks($permalink_structure = '') {1309 if (empty($permalink_structure)) {1310 $permalink_structure = get_settings('permalink_structure');1311 1312 if (empty($permalink_structure)) {1313 return false;1314 }1315 }1316 1317 // If the index is not in the permalink, we're using mod_rewrite.1318 if (preg_match('#^/*index.php#', $permalink_structure)) {1319 return true;1320 }1321 1322 return false;1323 }1324 1325 function preg_index($number, $matches = '') {1326 $match_prefix = '$';1327 $match_suffix = '';1328 1329 if (! empty($matches)) {1330 $match_prefix = '$' . $matches . '[';1331 $match_suffix = ']';1332 }1333 1334 return "$match_prefix$number$match_suffix";1335 }1336 1337 1338 1308 function get_page_uri($page) { 1339 1309 global $wpdb; … … 1353 1323 1354 1324 return $uri; 1355 }1356 1357 function page_rewrite_rules() {1358 $uris = get_settings('page_uris');1359 1360 $rewrite_rules = array();1361 if( is_array( $uris ) )1362 {1363 foreach ($uris as $uri => $pagename) {1364 $rewrite_rules += array($uri . '/?$' => "index.php?pagename=" . urldecode($pagename));1365 }1366 }1367 1368 return $rewrite_rules;1369 }1370 1371 function get_date_permastruct($permalink_structure = '') {1372 if (empty($permalink_structure)) {1373 $permalink_structure = get_settings('permalink_structure');1374 1375 if (empty($permalink_structure)) {1376 return false;1377 }1378 }1379 1380 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1381 // The date permalink must have year, month, and day separated by slashes.1382 $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%');1383 1384 $date_structure = '';1385 1386 foreach ($endians as $endian) {1387 if (false !== strpos($permalink_structure, $endian)) {1388 $date_structure = $front . $endian;1389 break;1390 }1391 }1392 1393 if (empty($date_structure)) {1394 $date_structure = $front . '%year%/%monthnum%/%day%';1395 }1396 1397 return $date_structure;1398 }1399 1400 function get_year_permastruct($permalink_structure = '') {1401 $structure = get_date_permastruct($permalink_structure);1402 1403 if (empty($structure)) {1404 return false;1405 }1406 1407 $structure = str_replace('%monthnum%', '', $structure);1408 $structure = str_replace('%day%', '', $structure);1409 1410 $structure = preg_replace('#/+#', '/', $structure);1411 1412 return $structure;1413 }1414 1415 function get_month_permastruct($permalink_structure = '') {1416 $structure = get_date_permastruct($permalink_structure);1417 1418 if (empty($structure)) {1419 return false;1420 }1421 1422 $structure = str_replace('%day%', '', $structure);1423 1424 $structure = preg_replace('#/+#', '/', $structure);1425 1426 return $structure;1427 }1428 1429 function get_day_permastruct($permalink_structure = '') {1430 return get_date_permastruct($permalink_structure);1431 }1432 1433 function generate_rewrite_rules($permalink_structure = '', $matches = '', $forcomments = false) {1434 $rewritecode =1435 array(1436 '%year%',1437 '%monthnum%',1438 '%day%',1439 '%hour%',1440 '%minute%',1441 '%second%',1442 '%postname%',1443 '%post_id%',1444 '%category%',1445 '%author%',1446 '%pagename%',1447 '%search%'1448 );1449 1450 $rewritereplace =1451 array(1452 '([0-9]{4})',1453 '([0-9]{1,2})',1454 '([0-9]{1,2})',1455 '([0-9]{1,2})',1456 '([0-9]{1,2})',1457 '([0-9]{1,2})',1458 '([^/]+)',1459 '([0-9]+)',1460 '(.+?)',1461 '([^/]+)',1462 '([^/]+)',1463 '(.+)'1464 );1465 1466 $queryreplace =1467 array (1468 'year=',1469 'monthnum=',1470 'day=',1471 'hour=',1472 'minute=',1473 'second=',1474 'name=',1475 'p=',1476 'category_name=',1477 'author_name=',1478 'pagename=',1479 's='1480 );1481 1482 $feedregex2 = '(feed|rdf|rss|rss2|atom)/?$';1483 $feedregex = 'feed/' . $feedregex2;1484 1485 $trackbackregex = 'trackback/?$';1486 $pageregex = 'page/?([0-9]{1,})/?$';1487 1488 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1489 preg_match_all('/%.+?%/', $permalink_structure, $tokens);1490 1491 $num_tokens = count($tokens[0]);1492 1493 $index = 'index.php';1494 $feedindex = $index;1495 $trackbackindex = $index;1496 for ($i = 0; $i < $num_tokens; ++$i) {1497 if (0 < $i) {1498 $queries[$i] = $queries[$i - 1] . '&';1499 }1500 1501 $query_token = str_replace($rewritecode, $queryreplace, $tokens[0][$i]) . preg_index($i+1, $matches);1502 $queries[$i] .= $query_token;1503 }1504 1505 $structure = $permalink_structure;1506 if ($front != '/') {1507 $structure = str_replace($front, '', $structure);1508 }1509 $structure = trim($structure, '/');1510 $dirs = explode('/', $structure);1511 $num_dirs = count($dirs);1512 1513 $front = preg_replace('|^/+|', '', $front);1514 1515 $post_rewrite = array();1516 $struct = $front;1517 for ($j = 0; $j < $num_dirs; ++$j) {1518 $struct .= $dirs[$j] . '/';1519 $struct = ltrim($struct, '/');1520 $match = str_replace($rewritecode, $rewritereplace, $struct);1521 $num_toks = preg_match_all('/%.+?%/', $struct, $toks);1522 $query = $queries[$num_toks - 1];1523 1524 $pagematch = $match . $pageregex;1525 $pagequery = $index . '?' . $query . '&paged=' . preg_index($num_toks + 1, $matches);1526 1527 $feedmatch = $match . $feedregex;1528 $feedquery = $feedindex . '?' . $query . '&feed=' . preg_index($num_toks + 1, $matches);1529 1530 $feedmatch2 = $match . $feedregex2;1531 $feedquery2 = $feedindex . '?' . $query . '&feed=' . preg_index($num_toks + 1, $matches);1532 1533 if ($forcomments) {1534 $feedquery .= '&withcomments=1';1535 $feedquery2 .= '&withcomments=1';1536 }1537 1538 $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2, $pagematch => $pagequery);1539 1540 if ($num_toks) {1541 $post = 0;1542 if (strstr($struct, '%postname%') || strstr($struct, '%post_id%')1543 || (strstr($struct, '%year%') && strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) {1544 $post = 1;1545 $trackbackmatch = $match . $trackbackregex;1546 $trackbackquery = $trackbackindex . '?' . $query . '&tb=1';1547 $match = $match . '?([0-9]+)?/?$';1548 $query = $index . '?' . $query . '&page=' . preg_index($num_toks + 1, $matches);1549 } else {1550 $match .= '?$';1551 $query = $index . '?' . $query;1552 }1553 1554 $rewrite = $rewrite + array($match => $query);1555 1556 if ($post) {1557 $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite;1558 }1559 }1560 1561 $post_rewrite = $rewrite + $post_rewrite;1562 }1563 1564 return $post_rewrite;1565 }1566 1567 /* rewrite_rules1568 * Construct rewrite matches and queries from permalink structure.1569 * matches - The name of the match array to use in the query strings.1570 * If empty, $1, $2, $3, etc. are used.1571 * Returns an associate array of matches and queries.1572 */1573 function rewrite_rules($matches = '', $permalink_structure = '') {1574 $rewrite = array();1575 1576 if (empty($permalink_structure)) {1577 $permalink_structure = get_settings('permalink_structure');1578 1579 if (empty($permalink_structure)) {1580 return $rewrite;1581 }1582 }1583 1584 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1585 $index = 'index.php';1586 $prefix = '';1587 if (using_index_permalinks($permalink_structure)) {1588 $prefix = $index . '/';1589 }1590 1591 // Post1592 $post_rewrite = generate_rewrite_rules($permalink_structure, $matches);1593 1594 // Date1595 $date_rewrite = generate_rewrite_rules(get_date_permastruct($permalink_structure), $matches);1596 1597 // Root1598 $root_rewrite = generate_rewrite_rules($prefix . '/', $matches);1599 1600 // Comments1601 $comments_rewrite = generate_rewrite_rules($prefix . 'comments', $matches, true);1602 1603 // Search1604 $search_structure = $prefix . "search/%search%";1605 $search_rewrite = generate_rewrite_rules($search_structure, $matches);1606 1607 // Categories1608 if ( '' == get_settings('category_base') )1609 $category_structure = $front . 'category/';1610 else1611 $category_structure = get_settings('category_base') . '/';1612 1613 $category_structure = $category_structure . '%category%';1614 $category_rewrite = generate_rewrite_rules($category_structure, $matches);1615 1616 // Authors1617 $author_structure = $front . 'author/%author%';1618 $author_rewrite = generate_rewrite_rules($author_structure, $matches);1619 1620 // Pages1621 $page_rewrite = page_rewrite_rules();1622 1623 // Deprecated style static pages1624 $page_structure = $prefix . 'site/%pagename%';1625 $old_page_rewrite = generate_rewrite_rules($page_structure, $matches);1626 1627 // Put them together.1628 $rewrite = $page_rewrite + $root_rewrite + $comments_rewrite + $old_page_rewrite + $search_rewrite + $category_rewrite + $author_rewrite + $date_rewrite + $post_rewrite;1629 1630 $rewrite = apply_filters('rewrite_rules_array', $rewrite);1631 return $rewrite;1632 }1633 1634 function mod_rewrite_rules ($permalink_structure) {1635 $site_root = str_replace('http://', '', trim(get_settings('siteurl')));1636 $site_root = preg_replace('|([^/]*)(.*)|i', '$2', $site_root);1637 if ('/' != substr($site_root, -1)) $site_root = $site_root . '/';1638 1639 $home_root = str_replace('http://', '', trim(get_settings('home')));1640 $home_root = preg_replace('|([^/]*)(.*)|i', '$2', $home_root);1641 if ('/' != substr($home_root, -1)) $home_root = $home_root . '/';1642 1643 $rules = "<IfModule mod_rewrite.c>\n";1644 $rules .= "RewriteEngine On\n";1645 $rules .= "RewriteBase $home_root\n";1646 $rewrite = rewrite_rules('', $permalink_structure);1647 1648 $num_rules = count($rewrite);1649 $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" .1650 "RewriteCond %{REQUEST_FILENAME} -d\n" .1651 "RewriteRule ^.*$ - [S=$num_rules]\n";1652 1653 foreach ($rewrite as $match => $query) {1654 // Apache 1.3 does not support the reluctant (non-greedy) modifier.1655 $match = str_replace('.+?', '.+', $match);1656 1657 // If the match is unanchored and greedy, prepend rewrite conditions1658 // to avoid infinite redirects and eclipsing of real files.1659 if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) {1660 //nada.1661 }1662 1663 if (strstr($query, 'index.php')) {1664 $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n";1665 } else {1666 $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n";1667 }1668 }1669 $rules .= "</IfModule>\n";1670 1671 $rules = apply_filters('rewrite_rules', $rules);1672 1673 return $rules;1674 1325 } 1675 1326 -
trunk/wp-includes/template-functions-category.php
r1853 r1908 26 26 27 27 function get_category_link($echo = false, $category_id, $category_nicename) { 28 global $wpdb, $post, $querystring_start, $querystring_equal, $cache_categories;28 global $wpdb, $wp_rewrite, $post, $querystring_start, $querystring_equal, $cache_categories; 29 29 $cat_ID = $category_id; 30 $ permalink_structure = get_settings('permalink_structure');30 $catlink = $wp_rewrite->get_category_permastruct(); 31 31 32 if ( '' == $permalink_structure) {32 if (empty($catlink)) { 33 33 $file = get_settings('home') . '/' . get_settings('blogfilename'); 34 $link = $file.$querystring_start.'cat'.$querystring_equal.$cat_ID; 35 } else { 36 $category_nicename = $cache_categories[$category_id]->category_nicename; 37 // Get any static stuff from the front 38 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%')); 39 if ( '' == get_settings('category_base') ) : 40 $link = get_settings('home') . $front . 'category/'; 41 else : 42 $link = get_settings('home') . get_settings('category_base') . '/'; 43 endif; 44 if ($parent=$cache_categories[$category_id]->category_parent) $link .= get_category_parents($parent, FALSE, '/', TRUE); 45 $link .= $category_nicename . '/'; 46 } 47 48 if ($echo) echo $link; 49 return $link; 34 $catlink = $file.$querystring_start.'cat'.$querystring_equal.$cat_ID; 35 } else { 36 $category_nicename = $cache_categories[$category_id]->category_nicename; 37 if ($parent=$cache_categories[$category_id]->category_parent) $category_nicename = get_category_parents($parent, FALSE, '/', TRUE) . $category_nicename . '/'; 38 39 $catlink = str_replace('%category%', $category_nicename, $catlink); 40 $catlink = get_settings('home') . trailingslashit($catlink); 41 } 42 if ($echo) echo $catlink; 43 return $catlink; 50 44 } 51 45 -
trunk/wp-includes/template-functions-links.php
r1868 r1908 85 85 86 86 function get_page_link($id = false) { 87 global $post ;87 global $post, $wp_rewrite; 88 88 89 89 if (! $id) { … … 95 95 if ('' != $permalink) { 96 96 $link = get_page_uri($id); 97 if ( using_index_permalinks()) {97 if ($wp_rewrite->using_index_permalinks()) { 98 98 $link = 'index.php/' . $link; 99 99 } … … 107 107 108 108 function get_year_link($year) { 109 global $querystring_start, $querystring_equal;109 global $querystring_start, $querystring_equal, $wp_rewrite; 110 110 if (!$year) $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600)); 111 $yearlink = get_year_permastruct();111 $yearlink = $wp_rewrite->get_year_permastruct(); 112 112 if (!empty($yearlink)) { 113 113 $yearlink = str_replace('%year%', $year, $yearlink); 114 return get_settings('home') . $yearlink;114 return get_settings('home') . trailingslashit($yearlink); 115 115 } else { 116 116 return get_settings('home') .'/'. get_settings('blogfilename') .$querystring_start.'m'.$querystring_equal.$year; … … 119 119 120 120 function get_month_link($year, $month) { 121 global $querystring_start, $querystring_equal ;121 global $querystring_start, $querystring_equal, $wp_rewrite; 122 122 if (!$year) $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600)); 123 123 if (!$month) $month = gmdate('m', time()+(get_settings('gmt_offset') * 3600)); 124 $monthlink = get_month_permastruct();124 $monthlink = $wp_rewrite->get_month_permastruct(); 125 125 if (!empty($monthlink)) { 126 126 $monthlink = str_replace('%year%', $year, $monthlink); 127 127 $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink); 128 return get_settings('home') . $monthlink;128 return get_settings('home') . trailingslashit($monthlink); 129 129 } else { 130 130 return get_settings('home') .'/'. get_settings('blogfilename') .$querystring_start.'m'.$querystring_equal.$year.zeroise($month, 2); … … 133 133 134 134 function get_day_link($year, $month, $day) { 135 global $querystring_start, $querystring_equal ;135 global $querystring_start, $querystring_equal, $wp_rewrite; 136 136 if (!$year) $year = gmdate('Y', time()+(get_settings('gmt_offset') * 3600)); 137 137 if (!$month) $month = gmdate('m', time()+(get_settings('gmt_offset') * 3600)); 138 138 if (!$day) $day = gmdate('j', time()+(get_settings('gmt_offset') * 3600)); 139 139 140 $daylink = get_day_permastruct();140 $daylink = $wp_rewrite->get_day_permastruct(); 141 141 if (!empty($daylink)) { 142 142 $daylink = str_replace('%year%', $year, $daylink); 143 143 $daylink = str_replace('%monthnum%', zeroise(intval($month), 2), $daylink); 144 144 $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink); 145 return get_settings('home') . $daylink;145 return get_settings('home') . trailingslashit($daylink); 146 146 } else { 147 147 return get_settings('home') .'/'. get_settings('blogfilename') .$querystring_start.'m'.$querystring_equal.$year.zeroise($month, 2).zeroise($day, 2); … … 150 150 151 151 function get_feed_link($feed='rss2') { 152 global $wp_rewrite; 152 153 $do_perma = 0; 153 154 $feed_url = get_settings('siteurl'); … … 160 161 $index = 'index.php'; 161 162 $prefix = ''; 162 if ( using_index_permalinks()) {163 if ($wp_rewrite->using_index_permalinks()) { 163 164 $feed_url .= '/' . $index; 164 165 } … … 417 418 418 419 function get_pagenum_link($pagenum = 1){ 420 global $wp_rewrite; 421 419 422 $qstr = $_SERVER['REQUEST_URI']; 420 423 … … 454 457 455 458 // If it's not a path info permalink structure, trim the index. 456 if (! using_index_permalinks()) {459 if (! $wp_rewrite->using_index_permalinks()) { 457 460 $qstr = preg_replace("#/*" . $index . "/*#", '/', $qstr); 458 461 } else {
Note: See TracChangeset
for help on using the changeset viewer.