我在一个新项目中,我正在设计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]
我无法使其工作且CSS /图像文件无法加载。 我非常感谢能给我一个解决方案。
答案 0 :(得分:6)
您可以使用四个规则执行此操作,每种情况一个:
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]
现在您的上一期,无法找到外部链接的资源,原因是您可能使用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路径
答案 1 :(得分:1)
虽然我知道几个月前@Gumbo已经简洁地回答了这个问题,但最近我遇到了类似的问题...并且我不想在我的应用中包含完整/绝对路径,以保持动态并且没有一堆APP_PATH(php)vars到处...所以我只是添加了一个base [href] html标签
喜欢这样......
<base href="http://<?php echo $_SERVER[HTTP_HOST];?><?php echo APP_PATH;?>"/>
希望能帮助别人......而且这并不是试图折扣@Gumbo的回复至少......他们是正确的:e-o on :)。
答案 2 :(得分:1)
不应该是
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^ - [L]
在@Gumbo上面的回答中?和我一起工作。如果是文件(如CSS),请让它通过。