如何解决PHP重写页面URL时,$ _ get不起作用
我正在使用此URL rewriting with PHP文件夹结构重写URL。我已经做好了,但重写URL后$_GET['cat_id']
无法正常工作。现在如何获取数据?请帮忙。我的项目在这里http://199.192.21.232/~admin/category/men-items
脚本
define( 'INCLUDE_DIR',dirname( __FILE__ ) . '/' );
$rules = array(
'picture' => "/picture/(?'text'[^/]+)/(?'id'\d+)",// '/picture/some-text/51'
'album' => "/album/(?'album'[\w\-]+)",// '/album/album-slug'
'category' => "/category/(?'category'[\w\-]+)",// '/category/category-slug'
'page' => "/page/(?'page'about|contact)",// '/page/about','/page/contact'
'post' => "/(?'post'[\w\-]+)",// '/post-slug'
'home' => "/" // '/'
);
$uri = rtrim( dirname($_SERVER["SCRIPT_NAME"]),'/' );
$uri = '/' . trim( str_replace( $uri,'',$_SERVER['REQUEST_URI'] ),'/' );
$uri = urldecode( $uri );
foreach ( $rules as $action => $rule ) {
if ( preg_match( '~^'.$rule.'$~i',$uri,$params ) ) {
include( INCLUDE_DIR . $action . '.PHP' );
exit();
}
}
include( INCLUDE_DIR . '404.PHP' );
HTaccess
RewriteEngine On
RewriteRule ^/.*$ index.PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.PHP [QSA,L]
解决方法
在您发布的代码中,没有$_GET['cat_id']
变量,除非请求的URL上有一个cat_id
URL参数(您未声明)。
如果.htaccess
文件和index.php
脚本位于http://example.com/~admin/
(其中~admin
是Apache每个用户的Web目录),则请求的格式为{{ 1}}(如您的示例所示)将导致http://example.com/~admin/category/men-items
数组索引的值为$params['category']
(来自匹配正则表达式中的命名捕获组)。如果那是您指的是什么?但是这里没有“ cat_id”。
更新:
我现在只想在网站1上有两个链接:
men-items
和2:/~admin/category.php?cat_id=2
。它将在功能中造成内容重复问题,我只需要一个链接,如2:/~admin/category/men-items
,因此需要将1个链接重定向到2
要规范化SEO的URL,您可以在/~admin/category/men-items
文件顶部执行以下操作:
.htaccess
如果旧的URL RewriteCond %{QUERY_STRING} ^cat_id=2$
RewriteRule ^category\.php$ /~admin/category/men-items [R=301,L]
仍作为物理文件存在,那么您需要确保禁用MultiViews以避免与mod_rewrite冲突。例如,在您的category.php
文件的最顶部:
.htaccess
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。