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