.htaccess - 如何在 mod_rewrite 中设置可选参数

标签 .htaccess mod-rewrite

我在一个新项目中,正在设计 URL 结构, 问题是我希望 URL 看起来像这样: /category-23/关键字/5/ 正常页面是: /search.php?q=keyword&cat=23&page=5 所以我的问题是,catpage 字段必须是可选的,我的意思是如果我转到 /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/

相关文章:

php - 如何限制和重定向PHP中的某些页面

apache - 如何mod_rewrite对index.php的每个请求(真实文件除外)但排除一个真实目录?

ajax - Ajax 调用的 IBM Commerce SEO URL 问题

.htaccess - Htaccess 重写并重定向到 url

PHP/APACHE : can i auto_prepend to a . js 文件?

.htaccess; 301 重定向不起作用

php - Css、图像和 js 在 .htaccess 文件中不起作用

php - 如何创建搜索,对搜索引擎友好(mod_rewrite htaccess)

Apache - 如何在调试 htaccess 时禁用浏览器缓存

javascript - 在 JavaScript 中获取 htaccess URL 参数