带/斜杠的Mod Rewrite Problems(Apache)
我打赌这里有一个明显的问题,我没有看到 对于熟悉Mod Rewrite的人来说,这里有一些重要的信息 此处存在具有mod rewrite规则的.htaccess文件: 用户转到以下URL: Mod Rewrite规则实际上应该告诉服务器访问此URL: .htaccess:带/斜杠的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]
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
将无法很好地工作,或者根本无法工作
这意味着URLhttp://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]
最后一个想法:也许你的浏览器会看到URLhttp://www.thedomain.com/test/blog
并认为它是一个目录,然后添加了斜杠?因此,URL是发送的http://www.thedomain.com/test/blog/
。在这种情况下,正则表达式将不匹配,除非您允许尾部斜杠:
RewriteRule ^test/([^/.]+)/?$ /index.php?page=$1 [L]
哎呀。很抱歉说了这么多-在经过重写的HTTP请求中,可能会出现很多问题,并且有很多方法可以尝试克服这些问题:-)好的,首先,我认为GoDaddy apache服务器只是关闭了一些选项。我认为如果他们的配置中没有一个重写规则,
RewriteRule
将无法很好地工作,或者根本无法工作
这意味着URLhttp://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]
最后一个想法:也许你的浏览器会看到URLhttp://www.thedomain.com/test/blog
并认为它是一个目录,然后添加了斜杠?因此,URL是发送的http://www.thedomain.com/test/blog/
。在这种情况下,正则表达式将不匹配,除非您允许尾部斜杠:
RewriteRule ^test/([^/.]+)/?$ /index.php?page=$1 [L]
哎呀。很抱歉,我要说的是,在经过重写的HTTP请求中,可能会出现很多问题,并且有很多方法可以尝试解决这些问题:-)我无法解决