使用多个参数重写不起作用



我正在创建一个规则来显示类型为的地址

main.php?cat=MyCategory
main.php?cat=MyCategory&sub=MySubcategory
main.php?cat=MyCategory&sub=MySubcategory&prod=MyProduct

作为

MyDomain.com/MyCategory
MyDomain.com/MyCategory/MySubcategory
MyDomain.com/MyCategory/MySubcategory/MyProduct

但是有两个问题:

第一个问题是显示页面上的其他链接的起始位置错误。

MyDomain.com/MyCategory/MySubcategory/MyProduct/newlink.html

应该引用到根,就像这个

MyDomain.com/newlink.html

第二个问题是,从第2/3个URL级别来看,我的引用(如javascript、img src和css链接(是错误的。它从上层url中查找这些相对文件。我该如何解决这个问题?

我的.htaccess文件

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ principal.php?cat=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ principal.php?cat=$1&sub=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ principal.php?cat=$1&sub=$2&prod=$3  [L]

尝试使用:

RewriteCond %{REQUEST_URI} !^/newlink.html$ 

但不起作用,有什么想法吗?

对于处理第四级.html格式URL的第一个查询,请尝试以下.htaccess规则文件。在测试URL之前,请确保清除浏览器缓存。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:[^/]*/[^/]*/[^/]*/)([^.]*.html)/?$  $1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ principal.php?cat=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ principal.php?cat=$1&sub=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ principal.php?cat=$1&sub=$2&prod=$3  [L]

对于JS/CS重写/重定向:您可能需要使用base标记来修复您的JS和其他相关资源。如果你使用相对路径链接js文件,那么该文件显然会得到404,因为它在寻找URL路径。例如,如果URL路径是/file/而不是file.html,那么您的相对资源是从/file/加载的,该文件不是目录,而是重写的html文件。若要修复此问题,请使链接成为绝对链接或使用基本标记。在你的网页标题中添加这个<base href="/">,这样你的相关链接就可以从正确的位置加载。

相关内容

  • 没有找到相关文章

最新更新