.htaccess 我的url重写重定向到mydomain.com/var/www/clients/client3/web25/

.htaccess 我的url重写重定向到mydomain.com/var/www/clients/client3/web25/,.htaccess,url-rewriting,.htaccess,Url Rewriting,我正试图在我的joomla网站上重写一个url。我有一个额外的页面,上面有一些其他的东西 我有: RewriteRule ^company/([^/]+) company?alias=$1 [NC] 我希望company/somecompany在哪里显示url company?alias=somecompany将提供什么(而不是转发给它) 我得到的是重定向到: 此外,如果我包含一个“-”式的“公司/某个公司”,它会跳过我的重写,直接转到joomla重写规则(并且找不到文章) 我做错了什么?您

我正试图在我的joomla网站上重写一个url。我有一个额外的页面,上面有一些其他的东西

我有:

RewriteRule ^company/([^/]+) company?alias=$1 [NC]
我希望company/somecompany在哪里显示url company?alias=somecompany将提供什么(而不是转发给它)

我得到的是重定向到:

此外,如果我包含一个“-”式的“公司/某个公司”,它会跳过我的重写,直接转到joomla重写规则(并且找不到文章)


我做错了什么?

您需要添加一个
RewriteBase
。当重写规则的目标不是以斜杠开头(使其成为绝对URI)时,apache需要猜测它是URI路径还是文件路径,并且错误地猜测它是文件路径。添加一个基告诉apache它是一个URI路径

RewriteBase /
或者向目标添加前导斜杠:
/company/?alias=$1

您还需要在company中添加尾随斜杠,并使用
[L]
标志:

RewriteRule ^company/([^/]+) company/?alias=$1 [L,NC]

缺少的尾部斜杠可能是导致mod_dir和
DirectorySlash
重定向的罪魁祸首。
L
标志可能是joomla规则最终得到应用的原因。

以下是工作示例:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /
  RewriteRule ^/?old-folder/(.*)$ /new-folder/$1 [R=301,L]
</IfModule>

重新启动发动机
重写基/
重写规则^/?旧文件夹/(.*)$/新文件夹/$1[R=301,L]
有关更多示例,请检查:


未设置重写基。我尝试过取消“RewriteBase/”的注释,但它给出了相同的结果。这真的很奇怪!如果我使用[R,L],它会将url完全重定向到目标公司?alias=something。但是由于我不想重定向,而是想重写,我真的不明白为什么其他标志不起作用!