我正在创建一个规则来显示类型为的地址
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="/">
,这样你的相关链接就可以从正确的位置加载。