htaccess modrewrite为SEF重命名目录

时间:2015-01-16 01:16:08

标签: .htaccess directory rename mask

我想更改目录/房间以显示SEF的名称/装备,而无需在我们的脚本中更改目录名称。注意:目录“gear”不存在。

例如我想改变: 网站/私营/间/新 说 站点/私人/齿轮/新

我目前的htaccess说:

RewriteEngine ON
RewriteCond %{THE_REQUEST} \ /(.*)/rooms([^\ ]+)? [NC]
RewriteRule ^ /%1/gear%2 [L,R]
RewriteRule ^(.*)/gear(/.*)?$ /$1/rooms$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L]

它完全取决于我想要site.com/gear/new的目录 但是,我收到404错误。我相信因为那里没有内容?我甚至尝试复制文件夹/房间并重命名它/齿轮,我仍然得到404.

当代码是:

RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L]
#RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

它会将您带到site / private / rooms / new,并显示显示/index.php的内容 你认为这可能是造成问题的原因吗?它不会显示site.com/gear/new的原因可能是因为它没有显示/index.php?

1 个答案:

答案 0 :(得分:0)

试试这个

RewriteEngine ON

RewriteCond %{THE_REQUEST} \ /(.*)/rooms([^\ ]+)? [NC]
RewriteRule ^ /%1/gear%2 [L,R]

RewriteRule ^(.*)/gear(/.*)?$ /$1/rooms$2 [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L]

您的规则不匹配,因为

 RewriteRule ^/rooms(.*)?$ /gear$1 [R]
  • 路径从不包含前导斜杠(在RewriteRule中使用.htaccess时)。因此/rooms永远不会匹配。
  • 您的规则忽略了网址路径以private开头。它们在roomsgear上匹配,作为第一个路径目录。