我在一个新项目中,正在设计 URL 结构,
问题是我希望 URL 看起来像这样:
/category-23/关键字/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]
我无法使其正常工作,并且 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
将此规则放在其他规则之前,任何可以映射到现有文件的请求都将通过:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^ - [L]
现在,您的最后一个问题是找不到外部链接的资源,这是因为您可能使用相对 URL 路径,例如 css/style.css
或 ./css/style .css
。这些相对引用是从基本 URL 路径解析的,该路径是使用引用的文档的 URL 的 URL 路径。因此,如果请求 /category/keyword
,则需要像 这样的相对引用>css/style.css
解析为 /category/keyword/css/style.css
而不是 /css/style.css
。使用绝对 URL 路径 /css/style.css
使其独立于实际的基本 URL 路径
关于.htaccess - 如何在 mod_rewrite 中设置可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927527/