.htaccess重写网址有效但我与某些网页存在冲突

时间:2017-03-16 01:19:42

标签: .htaccess mod-rewrite url-rewriting

我使用以下.htaccess规则将www.site.com/index.php转换为www.site.com/username

它工作得很好但是我遇到了一些页面的问题我无法访问例如同一目录中的其他页面,例如 settings.php 仅索引。允许php访问。另外我在使用include_once(“menu.php”)的同一目录中使用bootstrap的下拉菜单构建时遇到问题;在index.php文件中显示菜单但未显示下拉列表。

我测试的菜单没有.htacesss和下拉列表工作正常,我认为主要问题是.htaccess文件,如何解决?

我的.htaccess代码的替代品?

这是.htaccess代码

# .htaccess
RewriteEngine On
RewriteRule ^([a-z0-9-_.]+)/?$ index.php?id=$1 [NC,L]
RewriteRule ^([a-z0-9-_.]+)/([a-z0-9]+)/?$ index.php?id=$1&goto=$2 [NC,L]

这是menu.php代码

<li class="dropdown">
                        <a href="#" data-toggle="dropdown" class="dropdown-toggle"><?php echo $_SESSION["username"]; ?> <b class="caret"></b></a>
                        <ul class="dropdown-menu" style="background-color: #333; color:white;">
                            <li><a href="#"><i class="fa fa-home" aria-hidden="true"></i>&nbsp;<?php echo $lang['MENU_HOME']; ?></a></li>
                            <li><a href="#"><i class="fa fa-user" aria-hidden="true"></i>&nbsp;<?php echo $lang ['PROFILE']; ?></a></li>
                            <li><a href="#"><i class="fa fa-shopping-cart" aria-hidden="true"></i>&nbsp;<?php echo $lang ['SHOOPING_CART']; ?></a></li>
                            <li><a href="#"><i class="fa fa-search" aria-hidden="true"></i>&nbsp;<?php echo $lang ['SEARCH']; ?></a></li>
                            <li><a href="#"><i class="fa fa-envelope" aria-hidden="true"></i>&nbsp;<?php echo $lang ['MESSAGES']; ?></a></li>
                            <li><a href="#"><i class="fa fa-cog" aria-hidden="true"></i>&nbsp;<?php echo $lang ['SETTINGS']; ?></a></li>

                            <li class="divider"></li>
                            <li><a href="#"><i class="fa fa-sign-out" aria-hidden="true"></i>&nbsp;<?php echo $lang ['SIGN-OUT']; ?></a></li>
                        </ul>
                    </li>

2 个答案:

答案 0 :(得分:2)

RewriteCond 检查请求URL是文件,目录还是符号链接,如果是(默认为AND),第一次重写将失败。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^([a-z0-9-_.]+)/?$ index.php?id=$1 [NC,L]
RewriteRule ^([a-z0-9-_.]+)/([a-z0-9]+)/?$ index.php?id=$1&goto=$2 [NC,L]

如果是 settings.php 这样的网页,第二条规则也会失败。

答案 1 :(得分:0)

我用这种方式解决了菜单问题:

注意添加

include_once("menu.php");

我直接在页面中包含了菜单代码。 我使用javascript解决了重定向问题,

header("Location: page.php)";

我做了这个

&#13;
&#13;
<?php 
echo'<script> window.location = "page.php";</script>'; 
?>
&#13;
&#13;
&#13;