【问题标题】:How to fix a RewriteRule in htaccess to support url's without slashes at the end (/)? [duplicate]如何修复 htaccess 中的 RewriteRule 以支持 url 的末尾没有斜线 (/)? [复制]
【发布时间】:2013-01-29 12:33:16
【问题描述】:

我想重写以下网址:

http://www.mywebsite.com/helloworld/

http://www.mywebsite.com/index.php?page=hellworld

以下规则非常适合完成这项工作:

RewriteRule ^(.*)/$ index.php?page=$1

但是,我有一个问题:

当我转到:http://www.mywebsite.com/helloworld(看看末尾的斜杠 (/) 不存在)时,该规则不起作用。但是使用http://www.mywebsite.com/helloworld/ 效果很好。

¿我能做些什么来解决这个问题?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite friendly-url


    【解决方案1】:

    为了一致性起见,强制使用斜线可能会更好:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)/$ index.php?page=$1
    RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
    

    基本上,如果 URL 不是文件 (!-f),那么它将执行以下规则:如果它有一个斜杠,那么就去你想去的地方,如果它不重定向到带有斜杠的同一个 URL,我认为这会再次重复规则并转到您想要的位置。

    【讨论】:

      【解决方案2】:

      添加?

      RewriteRule ^(.*)/?$ index.php?page=$1
      

      【讨论】:

      • 那个?告诉字符或字符集合可能丢失;干得好,伙计们
      • 作为一个信息,第一个 (.*) 代表 1 美元,第二个 (.*) 将保留 2 美元
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多