.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]
以下是我希望重写的一些示例网址:
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]