1

以下是我希望重写的一些示例网址:

https://website.com?c=food&s=cheese&p=3
https://website.com?c=food&s=cheese
https://website.com?s=cheese

我希望将上述内容重写为:

https://website.com/food/cheese/3
https://website.com/food/cheese
https://website.com/cheese

这是我的 htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /?c=$1&s=$2&p=$3 [L]
RewriteRule ^([^/]*)/([^/]*)$ /?c=$1&s=$2 [L]
RewriteRule ^([^/]*)$ /?s=$1 [L]

谁能看到出了什么问题?我删除最后一行

RewriteRule ^([^/]*)$ /?s=$1 [L]

然而,页面加载,它似乎正在重写 css 和 js 文件?

4

2 回答 2

2

ARewriteCond仅适用于紧接着的 next RewriteRule。由于您有多个需要相同条件的规则,因此最好定义一个单独的规则来排除所有文件、目录和已知 URI。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} \.(jpg|css|js|gif|png)$ [NC]
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ ?c=$1&s=$2&p=$3 [L,QSA]

RewriteRule ^([^/]+)/([^/]+)/?$ ?c=$1&s=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ ?s=$1 [L,QSA]
于 2018-07-09T14:27:09.063 回答
0

它将失败/导致服务器错误的原因是因为它被放置在无限递归中 -^([^/]*)$重定向到/?s=$1它再次被拾取^([^/]*)$,重复无限。

试试这个。它不一定是最好的重写规则,但它应该可以解决您的特定问题:

RewriteRule ^([^/]*)$ index.php?s=$1 [L,QSA]

于 2018-07-09T14:34:56.023 回答