Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 Problems(Apache)_Apache_Mod Rewrite - Fatal编程技术网

带/斜杠的Mod Rewrite Problems(Apache)

带/斜杠的Mod Rewrite Problems(Apache),apache,mod-rewrite,Apache,Mod Rewrite,我打赌这里有一个明显的问题,我没有看到 对于熟悉Mod Rewrite的人来说,这里有一些重要的信息 此处存在具有mod rewrite规则的.htaccess文件: 用户转到以下URL: Mod Rewrite规则实际上应该告诉服务器访问此URL: .htaccess: Options FollowSymLinks Options -MultiViews RewriteEngine on RewriteRule ^test/([^/.]+)$ /index.php?page=$1 [L]

我打赌这里有一个明显的问题,我没有看到

对于熟悉Mod Rewrite的人来说,这里有一些重要的信息

此处存在具有mod rewrite规则的.htaccess文件: 用户转到以下URL: Mod Rewrite规则实际上应该告诉服务器访问此URL:

.htaccess:

Options FollowSymLinks
Options -MultiViews
RewriteEngine on
RewriteRule ^test/([^/.]+)$ /index.php?page=$1 [L]
这种代码/请求组合不起作用。如果您想知道代码片段^test不是^/test,这是因为显然这是GoDaddy上的一个问题,代码在^之后失败-这似乎与我的问题有关,我将进一步解释。。。如果我更改.htaccess代码行:

RewriteRule ^test/([^/.]+)$ /index.php?page=$1 [L]

(只需删除/here:^test/([^/]+))

当用户查看正确的index.php?page=blog服务器响应时,当请求的URL更改为适应(删除斜杠;testblog)时,代码就会工作。在我看来,我不能在规则的该死的匹配端使用任何斜杠。有什么好处


更新:如果相关,则该.htaccess文件和问题相关文件都存在于托管该文件的GoDaddy服务器的子目录中,尽管域将该子目录作为根目录指向该子目录。不确定这是否相关

更新:此服务器(在服务器根目录下)实际运行的wordpress启用了漂亮的URL,它们工作得非常好。我假设wordpress使用mod rewrite来创建疯狂的URL,比如domain.com/2008/11/15/the-article-title.html


非常感谢。

是您要找的吗?

是您要找的吗?

这里有一个很好的windows测试实用程序

尝试将代码更改为:

^/test/([^/]+)$ /index.php?page=$1 [L]
还是不砍

^test[^a-z]+([a-z]*)$ /index.php?page=$1 [L]

这里有一个很好的windows测试实用程序

尝试将代码更改为:

^/test/([^/]+)$ /index.php?page=$1 [L]
还是不砍

^test[^a-z]+([a-z]*)$ /index.php?page=$1 [L]
如果您想知道代码片段^test不是^/test,那是因为显然这是GoDaddy上的一个问题,代码在^[…]之后失败

这并不奇怪,但却是必要的:

.htaccess
文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)将自动删除以进行模式匹配,并在完成替换后自动添加

每个目录前缀用于文档根(
/.htaccess
)URL路径根(
/
)中的.htaccess文件。所以,带有
^
的模式必须在不使用每个目录前缀的情况下写入

以同样的方式处理替换。应用规则后,每个目录前缀将添加到替换中。所以试试这个规则:

RewriteRule ^test/([^/.]+)$ index.php?page=$1 [L]
如果您想知道代码片段^test不是^/test,那是因为显然这是GoDaddy上的一个问题,代码在^[…]之后失败

这并不奇怪,但却是必要的:

.htaccess
文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)将自动删除以进行模式匹配,并在完成替换后自动添加

每个目录前缀用于文档根(
/.htaccess
)URL路径根(
/
)中的.htaccess文件。所以,带有
^
的模式必须在不使用每个目录前缀的情况下写入

以同样的方式处理替换。应用规则后,每个目录前缀将添加到替换中。所以试试这个规则:

RewriteRule ^test/([^/.]+)$ index.php?page=$1 [L]

好的,首先,我认为GoDaddy apache服务器只是关闭了一些选项。我认为如果他们的配置中没有一个重写规则,
RewriteRule
将无法很好地工作,或者根本无法工作

这意味着URL
http://www.thedomain.com/testblog
完全可以工作,并且可以重新编写。所以我想我有点困惑

这里有一个想法:尝试创建一个名为
test
的目录,并将
.htaccess
文件放在其中!它看起来是这样的:

Options FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/test/([^/]+)
RewriteRule . /index.php?page=%1 [L]
好的,另一个想法是:使用
RewriteCond
。也许您可以直接检查请求URI,如下所示:

Options FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/test/([^/]+)
RewriteRule . /index.php?page=%1 [L]
最后一个想法:也许你的浏览器会看到URL
http://www.thedomain.com/test/blog
并认为它是一个目录,然后添加了斜杠?因此,URL是发送的
http://www.thedomain.com/test/blog/
。在这种情况下,正则表达式将不匹配,除非您允许尾部斜杠:

RewriteRule ^test/([^/.]+)/?$ /index.php?page=$1 [L]

哎呀。很抱歉说了这么多-在经过重写的HTTP请求中,可能会出现很多问题,并且有很多方法可以尝试克服这些问题:-)

好的,首先,我认为GoDaddy apache服务器只是关闭了一些选项。我认为如果他们的配置中没有一个重写规则,
RewriteRule
将无法很好地工作,或者根本无法工作

这意味着URL
http://www.thedomain.com/testblog
完全可以工作,并且可以重新编写。所以我想我有点困惑

这里有一个想法:尝试创建一个名为
test
的目录,并将
.htaccess
文件放在其中!它看起来是这样的:

Options FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/test/([^/]+)
RewriteRule . /index.php?page=%1 [L]
好的,另一个想法是:使用
RewriteCond
。也许您可以直接检查请求URI,如下所示:

Options FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/test/([^/]+)
RewriteRule . /index.php?page=%1 [L]
最后一个想法:也许你的浏览器会看到URL
http://www.thedomain.com/test/blog
并认为它是一个目录,然后添加了斜杠?因此,URL是发送的
http://www.thedomain.com/test/blog/
。在这种情况下,正则表达式将不匹配,除非您允许尾部斜杠:

RewriteRule ^test/([^/.]+)/?$ /index.php?page=$1 [L]
哎呀。很抱歉,我要说的是,在经过重写的HTTP请求中,可能会出现很多问题,并且有很多方法可以尝试解决这些问题:-)

我无法解决