我正在尝试使用mod_rewrite在网站上刷新网址。但它似乎没有奏效。我想要以下网址:
要改写为:
http://mydomain.com/index.php?t=test
我的.htaccess文件如下所示:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?t=$1 [L]
</IfModule>
但它似乎没有起作用。
mod_rewrite肯定已启用,因为以下简单规则会将网站重定向到example.com:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ http://example.com/?
</IfModule>
我的网站托管GoDaddy,如果这有所作为。该站点也被设置为主站点的子域。
答案 0 :(得分:0)
好的,看起来我需要在重写规则中指定完整的URL:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://mydomain.com/index.php?t=$1
</IfModule>
现在可以正确显示页面。
答案 1 :(得分:0)
我使用这个片段来获取路径的所有内容,除了一些不应该解析的资源文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ main.php
在main.php中,我调用了GetSegments(),它将为我提供一个被调用路径的数组:
function CheckSegmentsEmpty($var) {
if($var == '') {
return false;
}
else {
return true;
}
}
function GetSegments() {
$path = dirname($_SERVER['SCRIPT_NAME']);
if($path != '' && $path != '/')
$segments = str_replace($path, '', $_SERVER['REQUEST_URI']);
else
$segments = $_SERVER['REQUEST_URI'];
if($segments[0] == '/')
$segments = substr($segments, 1);
//$segments = strtolower($segments);
$segments = preg_replace("!\.htm(l|l\?)$!si", '', $segments);
$segments = explode('/', $segments);
$segments = array_filter($segments, 'CheckSegmentsEmpty');
return $segments;
}
一些例子:
也许这段简短的代码片段对您的工作也很有用......