.htaccess htaccess modrewrite为SEF重命名目录

.htaccess htaccess modrewrite为SEF重命名目录,.htaccess,directory,rename,mask,.htaccess,Directory,Rename,Mask,我想更改directory/rooms以显示SEF的名称/gear,而无需在脚本中遍历和更改目录名。注意:目录“gear”不存在 例如,我想更改: 现场/私人/房间/新 说 现场/私人/齿轮/新 我目前的访问权限是: RewriteEngine ON RewriteCond %{THE_REQUEST} \ /(.*)/rooms([^\ ]+)? [NC] RewriteRule ^ /%1/gear%2 [L,R] RewriteRule ^(.*)/gear(/.*)?$ /$1/room

我想更改directory/rooms以显示SEF的名称/gear,而无需在脚本中遍历和更改目录名。注意:目录“gear”不存在

例如,我想更改: 现场/私人/房间/新 说 现场/私人/齿轮/新

我目前的访问权限是:

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错误。我相信,因为那里没有内容?我甚至试着复制文件夹/房间,并将其重命名为/gear,但仍然得到了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,并使用showing/index.php显示内容 你认为这可能是造成问题的原因吗?它不会显示site.com/gear/new的原因可能是因为它没有显示/index.php

试试这个

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]
  • 路径从不包含前导斜杠(在
    .htaccess
    中使用
    重写规则时)。因此,
    /rooms
    永远不会匹配
  • 您的规则忽略URL路径以
    private
    开头。它们在
    rooms
    gear
    上匹配,作为第一个路径目录

非常感谢您的回复!!我尝试了你所说的&它越来越近了,但在测试时,它会将您转发到private/gear/new%2520HTTP/1.1?/gear/new HTTP/1.1它可能与内部/外部请求有关?我实际上没有一个“齿轮”文件夹,所以我相信它必须是外部的。。。我还在研究这到底意味着什么,像这样吗?重写cond%{u请求}\/(.*)/房间(/.*)?[NC]重写规则^/%1/gear%2[L,R]重写规则^(.*)/gear(/.*)?$/$1/房间([^\]+)?很抱歉我没听清楚,这是我见过的最奇怪的语言:)非常感谢你帮了我这个忙!!哈哈,这已经超出我的理解力了。请注意,第二条规则也是
[NC]
而不是
[NC,L]