我在.htaccess中写了以下规则
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ profile.php?business=$1
当我输入网址时 http://www.abc.com/mujeeb/
页面被正确转移到个人资料页面,页面看起来很好。
但我在URL中输入此内容 http://www.abc.com/mujeeb
页面没有显示。
你能说出原因吗?或者为此写下规则?我尝试了很多次但没有成功。
Mujeeb。
答案 0 :(得分:1)
page doesn't show.
因为您指定将RewriteRule应用于最后以/
结尾的网址。将其改写为
RewriteRule ^(.*)/?$ profile.php?business=$1 [L]
我希望您有额外的RewriteCond语句,以防止重定向的无限循环。
ps:基本上你可以双向阻止循环
1)检查请求的url是否与现有文件或目录不对应。它可能是最好的方法(阅读第二种方法的评论)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ profile.php?business=$1 [L]
2)检查您是否请求RewriteRule中的文件。这种方法并不好,因为对于每个请求,即使对于现有文件和目录,它也会调用profile.php脚本
RewriteCond %{REQUEST_URI} !profile\.php$
RewriteRule ^(.*)/?$ profile.php?business=$1 [L]
答案 1 :(得分:1)
这是因为您使用^(.*)/$
检查尾部斜杠。如果添加问号,则尾部斜杠将是可选的。
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)/?$ profile.php?business=$1
RewriteCond是必要的,以确保规则只应用一次。否则Apache将陷入无限循环。
答案 2 :(得分:0)
试试这个:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)[/]?$ profile.php?business=$1
这使得最后一个斜杠可选。
答案 3 :(得分:0)
你的规则是检查URI中的尾部斜杠,这就是/mujeeb/
有效的原因,但/mujeeb
却没有。将您的代码更改为:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
# If the request is not for a valid file
#RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid directory
#RewriteCond %{REQUEST_FILENAME} !-f
# your rule without trailing slash
RewriteRule ^(.*)$ profile.php?business=$1 [L,QSA]
答案 4 :(得分:0)
已经有很多好的答案。我的回答有点不同。
这就是我通常做的事情。如果请求的网址未以/
结尾,我会将浏览器重定向到结尾为/
的网址。这与Apache的默认行为一致(由于mod_dir
)。所以,这就是我解决这个问题的方法。
RewriteEngine On
# Canonicalize http://example.com/mujeeb to http://example.com/mujeeb/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)([^/])$ /$1$2/ [R=307,L]
# Let profile.php process http://example.com/mujeeb/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ profile.php?business=$1