.htaccess为seo友好的URL重写URL导致500错误

时间:2018-07-09 14:14:21

标签: .htaccess mod-rewrite seo

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

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文件?

2 个答案:

答案 0 :(得分:2)

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=$1&s=$2&p=$3 [L,QSA]

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

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

答案 1 :(得分:0)

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

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

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