这是我的.htaccess文件:
RewriteEngine on
RewriteBase /admin
RewriteRule menu/([0-9]+)/([0-9]+)/([a-z0-9]+) http://www.mysite.com/admin/index.php?m=$1&o=$2&token=$3 [R,L]
我必须包含完整的网址,因为没有它,它会一直重定向到http://www.mysite.com/menu/1/1/login.php
而不是mysite.com/admin/login.php
所以我重写了我的链接,所以它们看起来像这样:
<a href="/admin/menu/1/1/bl4h1234">Some link</a>
这样可行,但URL在地址栏中显示为丑陋的URL,但整个目的是将URL显示为漂亮的URL:/
我该如何解决?
答案 0 :(得分:1)
您正通过[R]
重定向到新网址。相反,从重写中删除协议和域并丢失[R]
。这将执行内部重写。
RewriteRule menu/([0-9]+)/([0-9]+)/([a-z0-9]+) index.php?m=$1&o=$2&token=$3 [L]
答案 1 :(得分:1)
另一种(&amp; standard [MVC / Front controller Patterns])处理mod_rewrite规则和重写的方法是将整个url传递给index.php,然后在那里处理它。
从长远来看,它实际上使它变得更简单,否则只有在添加更多功能时,问题的复杂性才会增加。
由于您似乎在每个文件夹(menu|admin)
中都使用 index.php ,因此您没有任何路由器脚本。
因此,您需要处理.htaccess
中的基本路线。你基本上只需要为每个文件夹重写一次。
.htaccess在你的根目录中。否则,您需要为每个文件夹重写并且不需要RewriteBase / path
目录结构(.htaccess放在root中的位置):
ROOT>/
/index.php
/.htaccess
/admin/
/index.php
/menu/
/index.php
/someOtherFolder/
/index.php
/somefile.php
.htaccess重写
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/menu/(.*)$ admin/index.php?route=$1 [L,QSA]
RewriteRule ^menu/(.*)$ index.php?route=$1 [L,QSA]
然后在index.php文件中,通过$_GET['route']
/
参数来处理路径
<?php
if(isset($_GET['route'])){
$url = explode('/',$_GET['route']);
//Assign your variables, or whatever you name them
$m = $url[0];
$o = $url[1];
$token = $url[2];
}else{
$m = null;
$o = null;
$token = null;
}
?>
希望它有所帮助。
答案 2 :(得分:0)