ser*_*gip 3 .htaccess mod-rewrite
我在一个新项目,我正在设计URL结构,我希望URL看起来像这样:
/category-23/keyword/5/
正常页面是:
/search.php?q=keyword&cat=23&page=5
所以我的问题是,cat和page字段,必须是可选的,我的意思是,如果我去到/keyword它应该是
/search.php?q=keyword(第1页),如果我去
/category/keyword应该是:
/search.php?q=keyword&cat=category&p=1
和也,如果我去
/keyword/5/它必须是:/search.php?q=keyword&p=5
现在我有这样的.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)$ search.php?q=$2&cat=$1&page=$3 [L]
Run Code Online (Sandbox Code Playgroud)
我无法使其工作,CSS /图像文件无法加载.我非常感谢能给我解决方案的人.
您可以使用四个规则执行此操作,每个案例一个:
RewriteRule ^([^/]+)$ search.php?q=$1
RewriteRule ^([^/]+)/([0-9]+)$ search.php?q=$2&p=$1
RewriteRule ^([^/]+)/([^/]+)$ search.php?q=$2&cat=$1&p=1
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)$ search.php?q=$2&cat=$1&p=$3
Run Code Online (Sandbox Code Playgroud)
使用此规则在其他规则之前,任何可以映射到现有文件的请求都将通过:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)
现在你的最后一个问题是找不到外部链接的资源,这是因为你可能正在使用像css/style.css或那样的相对URL路径./css/style.css.这些相对引用从在引用中使用的文档的URL的URL路径的基本URL路径解决.所以,如果/category/keyword被请求时,就像一个相对引用css/style.css解析为/category/keyword/css/style.css,而不是/css/style.css.使用绝对URL路径/css/style.css使其独立于实际的基本URL路径