.htaccess rewrite url for seo friendly urls 导致 500 错误

.htaccess rewrite url for seo friendly urls causes 500 error

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

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=&s=&p= [L]
RewriteRule ^([^/]*)/([^/]*)$ /?c=&s= [L]
RewriteRule ^([^/]*)$ /?s= [L]

谁能看出哪里出了问题?我删除最后一行

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

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

一个RewriteCond只适用于紧邻的下一个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=&s=&p= [L,QSA]

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

RewriteRule ^([^/]+)/?$ ?s= [L,QSA]

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

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

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