我在这一点上遇到了困难,我正试图弄清楚为什么它不能正常工作!
这是想让网址看起来像
example.com/news/top/
这
example.com/index.php?view=news&task=top
但我需要的是“任务”可以是不同的东西,如
example.com/index.php?view=news&task=newest
example.com/index.php?view=news&task=help
example.com/index.php?view=news&task=write
....
当前.htaccess看起来像:
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+) index.php?view=$1&task=$2
如果我访问www.example.com/news/ - >它只加载index.php但不通过?view = news
如果我访问www.example.com/news/top/ - >它运作得很好。
但是我需要它们才能工作,为.htaccess添加一个新行,如:
RewriteRule ^news/ index.php?view=news
然后访问www.example.com/news/工作正常,但访问www.example.com/news/top/将无法获得任务的价值。
请帮助我!
提前谢谢。
答案 0 :(得分:1)
尝试将这些规则添加到文档根目录中的htaccess文件中:
RewriteEngine On
# Redirect access to index.php
RewriteCond %{THE_REQUEST} \ /index\.php\?view=([^&]+)&task=([^&\ ]+)
RewriteRule ^ /%1/%2/? [L,R=301]
# rewrite to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?view=$1&task=$2 [L]
首先将/index.php?view=news&task=foo
之类的请求重定向到/news/foo/
。然后,第二条规则在内部将/news/foo/
之类的请求重新设置回/index.php?view=news&task=foo
。
如果您的所有链接看起来都像/news/foo/
,那么您将不需要第一条规则。
答案 1 :(得分:0)
我不是老将,但这样的事可能有用:
RewriteRule /news/(.*) /index.php?view=news&task=$1 [L]
这应该将所有对/ news / abc的请求重写为index.php?task = news& view = abc。反向引用$1
代表RegEx中第一个被括号括起来的模式。