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
mod_rewrite.htaccess与%20转换为-_.htaccess_Mod Rewrite_Friendly Url - Fatal编程技术网

mod_rewrite.htaccess与%20转换为-

mod_rewrite.htaccess与%20转换为-,.htaccess,mod-rewrite,friendly-url,.htaccess,Mod Rewrite,Friendly Url,我已经阅读了几个小时关于.htaccess文件的内容,我想我已经开始了解这个想法了,但我仍然需要一些帮助。我发现是这样,但仍然不确定如何做到这一点 据我所知,您为每个要“美化”的页面扩展编写了一个规则,因此如果您有something.php,anotherpage.php,thispage.php等,并且他们期望(将收到???)参数,那么每个都需要自己的规则。这是正确的吗 我想更改的站点有如下URL maindomain.com/sue.php?r=word1%20word2 至少有一页有两个

我已经阅读了几个小时关于.htaccess文件的内容,我想我已经开始了解这个想法了,但我仍然需要一些帮助。我发现是这样,但仍然不确定如何做到这一点

据我所知,您为每个要“美化”的页面扩展编写了一个规则,因此如果您有
something.php
anotherpage.php
thispage.php
等,并且他们期望(将收到???)参数,那么每个都需要自己的规则。这是正确的吗

我想更改的站点有如下URL

maindomain.com/sue.php?r=word1%20word2
至少有一页有两个参数

maindomain.com/kevin.php?r=place%20name&c=person%20name
所以我想做的是

maindomain.com/sue/word1-word2/
maindomain.com/kevin/place-name/person-name/
保留这个.php页面并使其看起来像目录。我读过的大多数教程都涉及如何删除参数传递到的.php页面。但我想保留它

我所看到的问题是,url的所有
.php?r=
部分都是相同的,即
sue.php?r=
kevin.php?r=
,.htaccess根据文件名决定更改哪个url,然后将其忽略。如果我想保留文件名,我必须更改
?r=
那么它是个人的吗?我希望这是有意义的。到目前为止,我有这个,但我肯定它不会工作

Options +FollowSymLinks

RewriteEngine On

RewriteRule ^([a-zA-Z0-9]+)/$1.php?r=$1
RewriteRule ^([a-zA-Z0-9]+)/$1.php?r=$1&c=$1
我想我必须以某种方式添加
([^-]*)
,这样它就能检测到URL的
%20
部分,但接下来如何将其转换为
-
。另外,我的
$\u GET
函数如何工作


我希望我的问题有意义

你在这些规则中遗漏了一个空格,但我认为你在制定两个单独的规则方面的想法是正确的。更难的问题是将所有
-
转换为空格。让我们从转换获取变量开始:

# check that the "sue.php" actually exists:
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]+)/([^/]+)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([a-zA-Z0-9]+)/([^/]+)/?$ /$1.php?r=$2 [L,QSA]

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]+)/([^/]+)/([^/]+)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([a-zA-Z0-9]+)/([^/]+)/([^/]+)/?$ /$1.php?r=$2&c=$3 [L,QSA]
这些将采用类似于
/sue/blah/
的URI,并且:

  • 提取
    sue
    部分
  • 检查
    /document\u root/sue.php
    是否确实存在
  • /sue/blah/
    重写为
    /sue.php?r=blah
  • 同样的事情也适用于2字URI

    类似于
    /kevin/foo/bar/

  • 提取
    kevin
    部分
  • 检查
    /document\u root/kevin.php
    是否确实存在 3将
    /kevin/foo/bar/
    重写为
    /kevin.php?r=foo&c=bar
  • 现在,要去掉“-”并将其更改为空格:

    RewriteCond %{QUERY_STRING} ^(.*)(c|r)=([^&]+)-(.*)$
    RewriteRule ^(.*)$ /$1?%1%2=%3\ %4 [L]
    

    这看起来有点混乱,但条件与查询字符串匹配,在查询字符串中查找
    c=
    r=
    ,在
    c=
    r=
    的值中与
    -
    匹配,然后重写查询字符串以将
    -
    替换为
    (请注意,空格被编码为
    %20
    )。这将删除GET参数
    c
    r
    的值中的所有
    -
    实例,并用空格替换它们。

    这些规则中的某个地方缺少空格,但我认为您在创建两个单独的规则时有了正确的想法。更困难的问题是将所有
    -
    转换为空格。让我们开始吧通过转换获取变量的艺术:

    # check that the "sue.php" actually exists:
    RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]+)/([^/]+)/?$
    RewriteCond %{DOCUMENT_ROOT}/%1.php -f
    RewriteRule ^([a-zA-Z0-9]+)/([^/]+)/?$ /$1.php?r=$2 [L,QSA]
    
    RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]+)/([^/]+)/([^/]+)/?$
    RewriteCond %{DOCUMENT_ROOT}/%1.php -f
    RewriteRule ^([a-zA-Z0-9]+)/([^/]+)/([^/]+)/?$ /$1.php?r=$2&c=$3 [L,QSA]
    
    这些将采用类似于
    /sue/blah/
    的URI,并且:

  • 提取
    sue
    部分
  • 检查
    /document\u root/sue.php
    是否确实存在
  • /sue/blah/
    重写为
    /sue.php?r=blah
  • 同样的事情也适用于2字URI

    类似于
    /kevin/foo/bar/

  • 提取
    kevin
    部分
  • 检查
    /document\u root/kevin.php
    是否确实存在 3将
    /kevin/foo/bar/
    重写为
    /kevin.php?r=foo&c=bar
  • 现在,要去掉“-”并将其更改为空格:

    RewriteCond %{QUERY_STRING} ^(.*)(c|r)=([^&]+)-(.*)$
    RewriteRule ^(.*)$ /$1?%1%2=%3\ %4 [L]
    

    这看起来有点混乱,但条件与查询字符串匹配,在查询字符串中查找
    c=
    r=
    ,在
    c=
    r=
    的值中与
    -
    匹配,然后重写查询字符串以将
    -
    替换为
    (请注意,空格被编码为
    %20
    )。这将删除GET参数
    c
    r
    的值中的所有
    -
    实例,并用空格替换它们。

    这太复杂了。感谢您的详细解释。我要先看看我是否能让它在MAMP上工作这在我的测试服务器上不工作,MAMP也不知道为什么。我会这样做吗文件是否在子目录中?服务器上不允许使用中的选项。@AdamBrown如果您的实际URL看起来像
    http://domain/some-dir/sue/word1/word2
    ,那么是的,
    /somedir
    会破坏一切。答案基于这样的假设:一切都在文档根目录中,就像它是在你的任务中写的一样ion。这只是测试服务器。我不得不冒险。再次感谢。这太复杂了。谢谢你这么详细的解释。我要先看看我能不能让它在MAMP上工作。这在我的测试服务器上不起作用,MAMP也不知道为什么。文件会在子目录中吗?服务器上不允许使用中的选项@如果您的实际URL看起来像
    http://domain/some-dir/sue/word1/word2
    ,那么是的,
    /some dir
    会破坏一切。答案基于这样的假设:一切都在文档根目录中,就像你的问题中所写的那样。那只是测试服务器。我不得不冒险。再次感谢