.htaccess -使用多个参数重写不起作用

xv8emn3q  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(115)

我正在创建规则以显示以下类型的地址:

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

第二个问题是,从第二/第三个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$

但不管用,有什么办法吗?

yruzcnhs

yruzcnhs1#

对于处理第4级.html格式URLs第一个查询,请尝试使用以下.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 rewrite/redirect:***您可能需要使用base标记来修复您的js和其他相对资源。如果您使用相对路径链接js文件,那么文件显然会得到404,因为它在寻找URL路径。例如,如果URL路径是/file/而不是file.html,那么您的相对资源是从/file/加载的,它不是一个目录,而是重写的html文件。要修复此问题,请将您的链接设置为绝对链接或使用base标记。在网页的页眉中添加此<base href="/">,以便您的相对链接可以从正确的位置加载。

相关问题