Mod rewrite 为URL重写Mod_
几天来,我一直在寻找问题和答案,试图找出如何使这项工作 到目前为止,我可以更改我的URL,但它不会加载页面 我得走了 让它显示为 到目前为止,我有以下代码:Mod rewrite 为URL重写Mod_,mod-rewrite,Mod Rewrite,几天来,我一直在寻找问题和答案,试图找出如何使这项工作 到目前为止,我可以更改我的URL,但它不会加载页面 我得走了 让它显示为 到目前为止,我有以下代码: RewriteEngine on RewriteCond %{QUERY_STRING} ^mode=(.*) RewriteRule ^ http\:\/\/\www.mysite.com\/%1? [R=301,L] RewriteRule /(.*) /index.php?mode=%1 [L] 我已经改变了很多次,但什么都没
RewriteEngine on
RewriteCond %{QUERY_STRING} ^mode=(.*)
RewriteRule ^ http\:\/\/\www.mysite.com\/%1? [R=301,L]
RewriteRule /(.*) /index.php?mode=%1 [L]
我已经改变了很多次,但什么都没有。大多数网站似乎告诉我,我不需要301重定向,但这样我就什么也做不到了。以(你的)为例,一旦你正确地从mysite.com/index.php?mode=about
路由到mysite.com/about
,它现在将查看mysite.com/about/
以找到下一步(index.py/index.html/etc)
因为/about/
中没有任何内容,所以您将得到一个404错误
我认为,如果不在/about/
中进行一些处理,就无法使用mod_rewrite来实现您想要实现的目标,从而在到达那里后实际显示您想要的页面
请记住,文件系统始终优先
服务器上的文件系统将始终优先于
重写的URL。例如,如果您有一个名为“services”的目录
在该目录中有一个名为“design.html”的文件,您不能
将URL重定向到“”。发生的是
Apache进入“services”目录,没有看到
重写指令
要解决此问题,只需重命名目录(在
开始或结束是一种简单的方法)
我得走了
让它显示为
人们需要两种非常常见的规则类型,您的语句可以用两种需要不同规则的方式进行解释。我将解释你的陈述,你在http://www.mysite.com/index.php?mode=about
,但是您希望用户在输入http://www.mysite.com/about/
。要完成此操作,请执行以下操作:
RewriteRule ^about/?$ /index.php?mode=about [L]
由于可能会产生误解,最好说明您想要什么(1)用户将在其浏览器中输入什么,以及(2)您想要为他们提供什么真正的文件。我认为您不需要第2行和第3行&您似乎有%而不是$,请尝试:
RewriteEngine on
RewriteRule ^([^\/]+) /index.php?mode=$1 [L]
解决了这个问题。谢谢你的帮助
#
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^([^/]+)/$ /index.php?mode=$1 [L]
开始处仍然允许访问其他文件夹。因此URL确实会更改(表明您的重写工作正常),但当您在
/about/
结束时,页面index.php?mode=about
不会加载?或者您是否需要修复重写,以便它正确地路由到/about/
?是的,这是正确的。我的页面错误是“找不到页面”,但它确实显示了我希望在地址barI中显示的正确信息。我说,如果您只打开RewriteEngine
和RewriteRule/(.*)/index.php?mode=%1[L]
,并去掉其余部分,它应该会起作用。我已经试过了,这似乎是大多数网站都说要做的,但当我去掉其他部分时,什么都不起作用。只是再次尝试以确保。当我删除这两行代码时,网站的工作原理就像没有代码一样。当我使用你建议的内容时,什么也不会发生。我的站点的行为与代码不存在时的行为相同。内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。请与服务器管理员联系,webmaster@mysite.com并告知他们错误发生的时间,以及您可能采取的任何可能导致错误的措施。有关此错误的详细信息,请参阅服务器错误日志。此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误。@Ni Ck,在底部用另一个版本更新了答案;)当我尝试加载站点时,我又遇到了一个内部服务器错误。我不确定我是否遵守了。我应该用下划线重命名哪个目录?是在名字前面还是后面?我明白了。虽然这个网站上可能有很多类似的答案,但我建议将这个答案标记为已接受,这样其他人就会看到正确的答案。您也可以通过添加两行代码将两行合并为一行?在右括号之后,可能会添加查询字符串(例如:RewriteRule^([a-zA-Z0-9_-]+)/?$index.php?mode=$1&%{QUERY\u STRING}
),这样,如果您想在新URL之后有额外的变量,就不会松开它,例如/about/?anotherVar=extra
,这与index.php?mode=about&anotherVar=extra
相同。这是一个很好的观点。谢谢我要到明天才能检查它。我怎样才能得到第二个变量并将其屏蔽为?因此,我没有使用/about/?anotherVar=extra,而是使用/about/extra。第二个变量将出现在一些页面上,而不是所有的^([a-zA-Z0-9_-]+)(/([a-zA-Z0-9_-]+)?/?$index.php?mode=$1&anotherVar=$3&%{QUERY_STRING}
我应该更清楚一点。它可以工作并加载我的页面,但我丢失了部分页面。我在索引页面上使用了,mode变量将内容信息加载到template.php中。当我向URL添加/oliveOil时,它会加载正确的页面,但不会加载template.php。是否有解决方案,或者我必须坚持在URL中使用/products?productContent=oliveOil?