我有以下规则可以使用:
重写规则:
RewriteEngine on
DirectorySlash Off
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/(images|js|css)$
RewriteRule ^(.*[^/.])$ /$1/ [R=301,L]
我现在需要正确地重定向我的家庭uri:
http://www.example.com/sitemap/
- > http://www.example.com/index.php?page=sitemap
我尝试了以下方法:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/.])$ index.php?page=$1 [R=301,L,NC]
但是我找不到一个页面,大概是因为1美元正在用斜线喂食。我认为[^/]
会删除它,但显然不会。
有人可以解释我在哪里错了吗?
答案 0 :(得分:1)
使用此规则 - 它会将/sitemap/
重写为/index.php?page=sitemap
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ /index.php?page=$1 [QSA,L]
将.htaccess放入网站根文件夹。如果放在别处,需要稍微调整一下。
网址将保持不变。现有的查询字符串将被保留。
必须存在尾部斜杠/
(即/sitemap
不会触发此规则。)
只有在没有这样的文件夹或文件时才会重写(例如,如果您的网站根文件夹中有一个名为sitemap
的文件夹,则不会进行重写。)
它仅适用于1个文件夹的深层网址(例如/sitemap/
,/help/
,/user-account/
等。它不适用于路径中的2个或更多文件夹(例如/account/history/
)。
RE:此行: RewriteCond %{REQUEST_URI} !/(images|js|css)$
。
你说你想要“在他们的uri中排除任何包含图片| js | css的文件”。不幸的是,上述模式的工作方式不同 - 它与/something/css
匹配,但与/css/something
或/something/file.css
不匹配。
如果您想在斜线后直接匹配图片| js | css ANYWHERE,请删除$
。