Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 为什么这个修改会改变可见的URL?_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Apache 为什么这个修改会改变可见的URL?

Apache 为什么这个修改会改变可见的URL?,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,有人知道为什么以下规则会明显更改浏览器的地址栏吗?我不想这样 RewriteCond %{QUERY_STRING} (module)=([^&]*) RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2? [NE] 它应该采用如下URL /模块/视频/项目12345/?模块=67890 并将内部重定向到 /module/video/123456/module67890(即将查询字符串语法转换为目录语法) 重定向发生,但可见URL被调出 有什么想法吗?这越来越烦

有人知道为什么以下规则会明显更改浏览器的地址栏吗?我不想这样

RewriteCond %{QUERY_STRING} (module)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2? [NE]
它应该采用如下URL

/模块/视频/项目12345/?模块=67890

并将内部重定向到

/module/video/123456/module67890(即将查询字符串语法转换为目录语法)

重定向发生,但可见URL被调出


有什么想法吗?这越来越烦人了。。。提前感谢

在您的评论之后,这里是您的
.htaccess
的复制粘贴:

RewriteEngine on
Options +FollowSymLinks

# ------ force trailing slashes
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]

# ------ remove duplicate slashes
RewriteCond %{THE_REQUEST} \ (.*)//+(.*)\  [NC]
RewriteRule .* %1/%2 [R=301,L]

# ------ site-specific redirect rules...
RewriteCond %{QUERY_STRING} (module)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2? [NE]

RewriteCond %{QUERY_STRING} (ITEM_ENT_ID)=([^&]*)&(?:amp;)?.*(FILE_SERVICE_CONF_ID)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2/%3%4$2? [NE]

RewriteCond %{QUERY_STRING} (ITEM_ENT_ID)=([^&]*)
RewriteRule ^(.+?)(\/[^\/]+)?$ $1/%1%2$2? [NE]
只有一个重定向(=更改URL的唯一部分),它在这里:

# ------ remove duplicate slashes
RewriteCond %{THE_REQUEST} \ (.*)//+(.*)\  [NC]
RewriteRule .* %1/%2 [R=301,L]
所以我的猜测是,即使这个重写规则只被验证一次,在客户端还是有一个可见的重定向

请告诉我我是否正确

两个提示: 如果您不在托管环境中(=如果它是您自己的服务器,您可以修改虚拟主机,而不仅仅是
.htaccess
文件),请尝试使用
RewriteLog
指令:它可以帮助您跟踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢的检查regexp的工具:


(别忘了选择ereg(POSIX)而不是preg(PCRE)!

htaccess位于何处?另外,您的rewriterule似乎没有删除编号前面的
部分,这使我怀疑在其他htaccess文件中存在其他rewriterule。请向我们展示您的htaccess内容,因为上述规则不应导致重定向。(同时尝试清除浏览器缓存)谢谢,格本。我无法在此发布完整文件,因为它超过了SO注释的字符限制。该文件位于/pruk中。没有其他.htaccess文件在使用中。下面还有两条规则(但删除这些规则仍然会导致问题)我把文件放在这里:供您查看。再次感谢,谢谢,奥利弗。但是,问题发生在我添加多斜杠修复之前,如果我删除它,问题仍然会发生。即使我将文件简化为模块规则,它仍然会发生。这是有悖常理的,因为进一步向下的规则(例如底部规则)不会导致URL的可见更改,即使它们的结构几乎相同。我越是深入研究这个问题,就越觉得没有人能解决它,我就越觉得这是我们服务器的一个怪癖。我们运行服务器,所以我会让服务器管理员查看日志。“如果我将文件简化为模块规则”=>好的。。。如果没有重写规则,根本就没有重定向?你确定吗?您是否尝试过使用多个浏览器、空缓存、在私人会话中尝试以确保退出浏览器时没有留下任何内容,等等?每次添加重写规则时?如果您关闭重写规则(=只需将
.htaccess
重命名为
.htaccess.sav
),“但是问题发生在我添加多斜杠修复之前,如果我删除它,仍然会发生。”=>这是一个非常典型的问题:您认为在这两个修改之间没有做任何事情,您已经做了一些事情。电脑不会自己创造新东西。。。这种错误我已经犯过很多次了;)试着找出你还修改了什么。我理解你的整个“不知何故是你的错,而不是电脑的”论点。但是,没有其他的.htaccess文件,甚至当我将.htaccess文件简化为这个规则时——没有其他文件——以及清除缓存等。是的,在多个浏览器中进行了尝试。它总是,总是使重定向可见。我刚才注意到的是,如果我在替换中不引用QS args,它就不会这样做。