繁体   English   中英

向其中添加查询字符串行后,URL重写不起作用

[英]URL rewriting doesn't work right after adding a query string line into it

此URL重写行可以正常工作, 直到查询字符串行为止 ,并且在查询字符串之后,它们中的任何一个都不起作用。

ReWriteEngine On
ReWriteRule ^home?$ /mysite/index.php
ReWriteRule ^gallery?$ /mysite/gallery.php
ReWriteRule ^([a-z0-9]+)?$ /mysite/owner.php?name=$1
ReWriteRule ^about?$ /mysite/about.php
ReWriteRule ^location?$ /mysite/location.php

前两行homegallery按预期工作(包括第三行查询字符串 ),但其余两行关于和位置不起作用。 如果我要求使用重写的名称来显示这两页,则 这些页面不会出现在浏览器中 (响应什么都没有,除了我得到的页面与我当前所在的页面相同-甚至没有收到404错误消息),但是如果我要求这些页面原始名称带有.php扩展名的页面该页面进入浏览器。 我尝试将这两个about和location 放在查询字符串行的顶部,然后这两个页面按预期工作正常 ,但是当它们在查询字符串行的下面时,只有它们不起作用。 我能知道URL重写方法有什么问题吗? 我仍然无法解决问题。

您的尝试有很多问题,这是一个稍作修改的版本:

ReWriteEngine On
ReWriteRule ^/?home/?$ /mysite/index.php [END]
ReWriteRule ^/?gallery/?$ /mysite/gallery.php [END]
ReWriteRule ^/?about/?$ /mysite/about.php [END]
ReWriteRule ^/?location/?$ /mysite/location.php [END]
ReWriteRule ^([a-z0-9]+)/?$ /mysite/owner.php?name=$1 [END]

规则的顺序很重要。 更一般的应该放在更专业的下面

如果您遇到http状态500(服务器内部错误)的情况,并且上述设置机会是您使用的Apache http服务器的版本非常旧。 在那种情况下,用[L]标志替换[END]标志,在这种情况下也应该可以正常工作。


以上规则在实际的http服务器主机配置和动态配置文件中同样起作用。

还有一个一般性提示:您应该始终喜欢将此类规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件( .htaccess样式文件)。 众所周知,这些文件容易出错,难以调试,并且确实降低了服务器的速度。 仅当您无法控制主机配置(阅读:真正便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这显然是安全噩梦)时,才将它们作为最后一个选项来支持。 )。

我会改变这些顺序

ReWriteRule ^([a-z0-9]+)?$ /mysite/owner.php?name=$1
ReWriteRule ^about?$ /mysite/about.php
ReWriteRule ^location?$ /mysite/location.php

ReWriteRule ^about$ /mysite/about.php [L]
ReWriteRule ^location$ /mysite/location.php [L]
ReWriteRule ^([a-z0-9]+)$ /mysite/owner.php?name=$1 [L]

并添加最后一个标志。

^([a-z0-9]+)? 更通用,可以在到达最后2条规则之前匹配并更改URL。

换句话说,如果您的URL与其相关about则匹配此^([a-z0-9]+)? 被更改,然后与实际规则不匹配。 因此,通过将更通用的规则放在最后,您可以避免这种情况。

就像我在评论中所说的,我会在[L] Last [L]或[ Last [L]添加[L]标志,这样一旦完成匹配,它将结束重写,否则您将获得意外的匹配。

您也可以结合其中一些(可能)

 ReWriteRule ^(about|location)$ /mysite/$1.php [L]

我很确定? 表示前面的匹配是可选的,但是我删除了它,因为如果没有,则捕获组是可选的。 所以我不确定您在那里拥有它的目的是什么。 因为在我阅读时,这意味着^about?$ ,而t是可选的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM