我正在尝试使用htaccess文件来重写网址,我真的没有这方面的经验,我所做的一切都是在这里和谷歌搜索。我的链接中包含查询参数。我将所有内容发送到index.php页面。
我在尝试重写它们之前测试了所有链接,它们都在索引页面中工作。所以我创建了一个htaccess文件来重写链接,但我得到的只是一个空白页面,没有任何变量被发送到索引页面。我在index.php页面中使用$ _GET来检索变量。
以下是我尝试重写的链接类型列表以及我的实际htaccess文件的副本,还有mod rewrte已打开并在apache中正常运行。请帮我改变我的htaccess文件,根据我在下面显示的示例链接,确切地完成我想要的内容,好吗?
目录重写很好并且相应地工作,它是没有的链接。
另外,如果您注意到链接#1 和#2 ,则页面参数不会也不应出现在中这两个链接仅的重写链接,但仍然会向我的index.php发送空白或空字符串。
例如 -
<?php
$page= $_GET['page'];
$user= $_GET['user'];
$act= $_GET['act'];
$section= $_GET['section'];
$search= $_GET['search']
$xx= $_GET['xx'];
if($page == ''){
//Do some code
}elseif($page == 'search'){
//Do some code
?>
重写这些类型的链接
注意 - “ http:// ”是所有这些链接的前面,堆栈溢出不会让我添加它并发布。
LINK#1
本地主机/ notetag2 / JohnSmith对/所有/ 1
- REWRITE TO -
?本地主机/ notetag2 / index.php页面=安培;用户= JohnSmith对&安培; ACT =所有&安培;节= 1
LINK#2
本地主机/ notetag2 / JohnSmith对/所有
- REWRITE TO -
本地主机/ notetag2 / index.php页面=安培;用户= JohnSmith对&安培; ACT =所有
链接#3
本地主机/ notetag2 /搜索/ JohnSmith对
- REWRITE TO -
?本地主机/ notetag2 / index.php页面= SEACH&安培;搜索= JohnSmith对
LINK#4
本地主机/ notetag2 /图片/ 1
- REWRITE TO -
本地主机/ notetag2 / index.php页面=图片&安培;?XX = 1
重写目录
页
- REWRITE TO -
网络
这是我的实际HTACCESS文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /notetag2/
RewriteRule ^index\.php$ - [L]
RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3§ion=$4 [L,NC]
RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2&act=$3 [L,NC]
RewriteRule ^(.*)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=$1&user=$2 [L,NC]
RewriteRule ^(.*)/$ notetag2/index.php?page=$1 [L,NC]
RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=search&q=$1 [L,NC]
RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=picturesh&xx=$1 [L,NC]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ $1.php [L,NC]
RewriteRule ^pages/(.*) web/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /notetag2/index.php [L,QSA]
</IfModule>
答案 0 :(得分:0)
您需要修复几个正则表达式。由于您的htaccess文件位于notetag2目录中,因此您不需要与前导&#34; notetag2&#34;匹配。
但首先,你的规则不正确。如果您想与/search/something
匹配,则您无法获得与任何匹配的规则,否则它将与/search
匹配。所以这些规则需要排在最前面:
RewriteRule ^search/([a-zA-Z0-9_-]+)/?$ index.php?page=search&q=$1 [L,NC]
RewriteRule ^pictures/([a-zA-Z0-9_-]+)/?$ index.php?page=picturesh&xx=$1 [L,NC]
您也不需要您的规则目标中的notetag2/
,因为这些规则位于notetag2目录中。
因此,在这两条规则之后,您需要从最大到最小的每个重写:
本地主机/ notetag2 / JohnSmith对/所有/ 1
- REWRITE TO -
?本地主机/ notetag2 / index.php页面=教程&安培;用户= JohnSmith对&安培; ACT =所有&安培;节= 1
你几乎有这个,只是在正则表达式前面有一些随机(.*)/
,这将使它永远不会匹配你想要的。你想要这个:
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2§ion=$3 [L,NC]
然后是下一个:
本地主机/ notetag2 / JohnSmith对/所有
- REWRITE TO -
本地主机/ notetag2 / index.php页面=教程&安培;用户= JohnSmith对&安培; ACT =所有
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ notetag2/index.php?page=tutorial&user=$1&act=$2 [L,NC]
&#34;搜索&#34;和&#34;图片&#34;应该由上面的前两条规则处理。
无论你在旧的htaccess文件底部有什么其他规则,他们都需要遵守这些规则。
所以只留下:
页
- REWRITE TO -
网络
由于这些不以notetag2开头,因此您需要将这些规则放在不同的htaccess文件中,即文档根目录中的文件:
RewriteRule ^pages/(.*)$ /web/$1 [L]